using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace AxCopilot.Views.Controls;

/// <summary>
/// Phase 17-UI-C: 세션 헤더 바 (Codex 스타일).
/// ChatWindow Row 1 서브바에 임베드되어 모델/Plan/권한 칩을 표시.
/// 배경/테두리는 부모 컨테이너에서 제공하므로 이 컨트롤은 투명.
/// </summary>
public partial class AgentSessionHeaderBar : UserControl
{
    private string _planMode = "off"; // off / auto / always
    private string _permissionMode = "Ask"; // Ask / Auto / Deny

    /// <summary>모델 칩 클릭 이벤트 — 부모 창에서 모델 선택 팝업 열기.</summary>
    public event EventHandler? ModelChipClicked;

    /// <summary>Plan 모드 변경 이벤트. 인자: 새 모드 ("off"/"auto"/"always").</summary>
    public event EventHandler<string>? PlanModeChanged;

    /// <summary>권한 모드 변경 이벤트. 인자: 새 모드 ("Ask"/"Auto"/"Deny").</summary>
    public event EventHandler<string>? PermissionModeChanged;

    /// <summary>설정 패널 토글 요청 이벤트.</summary>
    public event EventHandler? SettingsRequested;

    public AgentSessionHeaderBar()
    {
        InitializeComponent();
    }

    // ─── 외부에서 상태 주입 ───────────────────────────────────────────────

    /// <summary>탭 레이블(좌측)을 업데이트합니다.</summary>
    public void SetTabLabel(string tab) => TxtTabLabel.Text = tab;

    /// <summary>모델 칩 텍스트를 업데이트합니다. 30자 초과 시 축약.</summary>
    public void SetModel(string modelName)
    {
        TxtModelChip.Text = modelName.Length > 30 ? modelName[..30] + "…" : modelName;
    }

    /// <summary>Plan 모드 칩을 업데이트합니다. 모드: "off" / "auto" / "always".</summary>
    public void SetPlanMode(string mode)
    {
        _planMode = mode;
        TxtPlanChip.Text = mode switch
        {
            "auto"   => "Plan: Auto",
            "always" => "Plan: Always",
            _        => "Plan: Off",
        };

        // 활성 상태 색상 — PlanIcon x:Name 직접 참조
        if (PlanIcon != null)
        {
            PlanIcon.Foreground = mode != "off"
                ? (TryFindResource("AccentColor") as Brush ?? Brushes.DodgerBlue)
                : (TryFindResource("SecondaryText") as Brush ?? Brushes.Gray);
        }

        // Plan 활성 시 칩 배경 강조
        if (ChipPlan != null)
        {
            ChipPlan.Background = mode != "off"
                ? new SolidColorBrush(Color.FromArgb(0x1A, 0x4B, 0x5E, 0xFC))
                : (TryFindResource("ItemBackground") as Brush ?? Brushes.Transparent);
        }
    }

    /// <summary>권한 모드 칩을 업데이트합니다. 모드: "Ask" / "Auto" / "Deny".</summary>
    public void SetPermissionMode(string mode)
    {
        _permissionMode = mode;
        TxtPermissionChip.Text = mode;

        // 권한 모드별 아이콘 색상
        if (PermIcon != null)
        {
            PermIcon.Foreground = mode switch
            {
                "Auto" => new SolidColorBrush(Color.FromRgb(0xDD, 0x6B, 0x20)),
                "Deny" => new SolidColorBrush(Color.FromRgb(0xC5, 0x0F, 0x1F)),
                _      => new SolidColorBrush(Color.FromRgb(0x4F, 0xC3, 0xF7)), // Ask = 하늘색
            };
        }
    }

    // ─── 이벤트 핸들러 ───────────────────────────────────────────────────

    private void ChipModel_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
        => ModelChipClicked?.Invoke(this, EventArgs.Empty);

    private void ChipPlan_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        // 3-state 순환: off → auto → always → off
        _planMode = _planMode switch
        {
            "off"  => "auto",
            "auto" => "always",
            _      => "off",
        };
        SetPlanMode(_planMode);
        PlanModeChanged?.Invoke(this, _planMode);
    }

    private void ChipPermission_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
        // 권한 칩 클릭 → 팝업은 부모(ChatWindow)가 처리
        => PermissionModeChanged?.Invoke(this, _permissionMode);

    private void BtnSettings_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
        => SettingsRequested?.Invoke(this, EventArgs.Empty);
}
