using ErsatzTV.Core.Interfaces.Troubleshooting;

namespace ErsatzTV.Core.Troubleshooting;

public class TroubleshootingPlaybackStatusStore : ITroubleshootingPlaybackStatusStore
{
    private readonly object _sync = new();
    private Option<TroubleshootingPlaybackResult> _result = Option<TroubleshootingPlaybackResult>.None;

    public Option<TroubleshootingPlaybackResult> CurrentResult
    {
        get
        {
            lock (_sync)
            {
                return _result;
            }
        }
    }

    public void Reset()
    {
        lock (_sync)
        {
            _result = Option<TroubleshootingPlaybackResult>.None;
        }
    }

    public void RecordCompletion(int exitCode, Option<double> speed)
    {
        lock (_sync)
        {
            _result = new TroubleshootingPlaybackResult(exitCode, speed);
        }
    }
}
