using NexusReader.UI.Shared.Models;
namespace NexusReader.UI.Shared.Services;
///
/// Thread-safe implementation of IReaderStateService.
/// Thread safety is ensured via lock-guarded property getters/setters.
/// UI updates originating from the JS event loop (via JSInvokable) are synchronized at Blazor's InvokeAsync(StateHasChanged) render boundary.
///
public sealed class ReaderStateService : IReaderStateService
{
private readonly object _lock = new();
private int _scrollPercent;
private List _checkpoints = new();
private string _blockId = string.Empty;
private MobileReaderTab _activeTab = MobileReaderTab.Reader;
public int CurrentScrollPercentage
{
get { lock (_lock) return _scrollPercent; }
set { lock (_lock) _scrollPercent = value; }
}
public List CurrentCheckpoints
{
get { lock (_lock) return _checkpoints; }
set { lock (_lock) _checkpoints = value ?? new(); }
}
public string CurrentBlockId
{
get { lock (_lock) return _blockId; }
set { lock (_lock) _blockId = value ?? string.Empty; }
}
public MobileReaderTab ActiveTab
{
get { lock (_lock) return _activeTab; }
set { lock (_lock) _activeTab = value; }
}
}