using ColumnizerLib;

using LogExpert.Core.Interfaces;

namespace LogExpert.Core.Callback;

public class ColumnizerCallback (ILogLineSource lineSource) : IPositionedColumnizerCallback, IAutoLogLineMemoryColumnizerCallback
{
    #region Fields
    private readonly ILogLineSource _lineSource = lineSource;

    #endregion

    #region Properties

    public int LineNum { get; set; }

    #endregion

    #region cTor

    private ColumnizerCallback (ColumnizerCallback original) : this(original._lineSource)
    {
        LineNum = original.LineNum;
    }

    #endregion

    #region Public methods

    public ColumnizerCallback Clone ()
    {
        return new ColumnizerCallback(this);
    }

    public string GetFileName ()
    {
        return _lineSource.GetCurrentFileName(LineNum);
    }

    public int GetLineCount ()
    {
        return _lineSource.LineCount;
    }

    public void SetLineNum (int lineNum)
    {
        LineNum = lineNum;
    }

    public ILogLineMemory GetLogLineMemory (int lineNum)
    {
        return _lineSource.GetLineMemory(lineNum);
    }

    #endregion
}