using SHH.ProcessLaunchers;

namespace SHH.ProcessLauncher
{
    /// <summary>
    /// 仪表盘日志适配器
    /// <para>职责：实现 ILauncherLogger 接口，将启动器的底层日志转发给业务层的 LogHelper 和 UI 通知服务。</para>
    /// </summary>
    public class DashboardLogger : ILauncherLogger
    {
        #region --- 接口实现 ---

        /// <summary>
        /// 处理普通控制台日志 (StdOut/StdErr)
        /// </summary>
        public void LogConsole(string processId, string message, bool isError)
        {
            // 1. 在控制台/调试窗口刷屏显示
            string prefix = isError ? "[ERR]" : "[INF]";

            //// 这里可以直接输出，或者通过事件抛给 UI 层去绑定 TextBox
            //// 为了演示，我们使用 LogHelper 的 Debug 方法
            //LogHelper.Debug($"[Console] {prefix} <{processId}>: {message}");
        }

        /// <summary>
        /// 处理关键生命周期事件
        /// </summary>
        public void LogLifecycle(string processId, LogAction action, LogTrigger trigger, string reason, object payload = null)
        {
            // 1. 生成高可读的结构化日志文本
            string logText = $"[{action.ToString().ToUpper()}] 触发源:{trigger} | 原因:{reason}";
            if (payload != null) logText += $" | 数据:{payload}";

            // 2. 根据触发源 (LogTrigger) 决定业务系统的响应策略
            switch (trigger)
            {
                //case LogTrigger.User:
                //    // 场景：用户点击了按钮
                //    // 策略：这是预期内操作，仅记录 Info 日志，不弹窗打扰用户
                //    LogHelper.Info(processId, logText);
                //    break;

                //case LogTrigger.System:
                //    // 场景：崩溃自动重启、熔断恢复等
                //    // 策略：记录 Warn 日志，运维人员需要知道系统发生了自愈行为
                //    LogHelper.Warn(processId, logText);
                //    break;

                //case LogTrigger.ResourceGuard:
                //    // 场景：内存超限被杀、CPU 报警
                //    // 策略：这是严重问题，必须记录 Error 日志，并发送 UI 强提醒 (Toast/弹窗)
                //    LogHelper.Error(processId, logText);

                //    // 调用通知服务 (模拟)
                //    NotificationService.ShowWarning($"进程异常: {processId}", $"触发资源管控: {reason}");
                //    break;

                //case LogTrigger.Scheduler:
                //    // 场景：定时重启
                //    LogHelper.Info(processId, $"[计划任务] {logText}");
                //    break;

                //default:
                //    LogHelper.Info(processId, logText);
                //    break;
            }
        }

        #endregion
    }
}