using System.Collections.ObjectModel;
using System.Windows;
using PersonalToolBox.Models;

namespace PersonalToolBox.Services;

/// <summary>
/// 日志服务实现，管理底部日志打印栏数据
/// 通过 ObservableCollection 将日志实时推送到 UI
/// </summary>
public class LogService : ILogService
{
    public ObservableCollection<LogEntry> Logs { get; } = new();

    public void Info(string message)
    {
        var entry = new LogEntry
        {
            Timestamp = DateTime.Now,
            Level = LogLevel.Info,
            Content = message
        };
        AddLog(entry);
    }

    public void Warning(string message)
    {
        var entry = new LogEntry
        {
            Timestamp = DateTime.Now,
            Level = LogLevel.Warning,
            Content = message
        };
        AddLog(entry);
    }

    public void Error(string message)
    {
        var entry = new LogEntry
        {
            Timestamp = DateTime.Now,
            Level = LogLevel.Error,
            Content = message
        };
        AddLog(entry);
    }

    public void Clear()
    {
        if (Application.Current != null)
            Application.Current.Dispatcher.Invoke(() => Logs.Clear());
        else
            Logs.Clear();
    }

    /// <summary>
    /// 将日志条目安全地添加到 UI 线程的集合中
    /// </summary>
    private void AddLog(LogEntry entry)
    {
        if (Application.Current != null)
            Application.Current.Dispatcher.Invoke(() => Logs.Add(entry));
        else
            Logs.Add(entry);
    }
}
