using System.Windows;
using AxCopilot.SDK;
using AxCopilot.Services;
using AxCopilot.Themes;

namespace AxCopilot.Handlers;

/// <summary>
/// 스포이드 색상 추출 핸들러. "pick" 프리픽스로 사용합니다.
/// 실행하면 전체 화면 스포이드 모드에 진입하고,
/// 클릭한 지점의 색상을 HEX 코드로 클립보드에 복사합니다.
/// 반투명 결과 창이 5초간 표시됩니다.
/// 예: pick → 스포이드 모드 진입
/// </summary>
public class ColorPickHandler : IActionHandler
{
    public string? Prefix => "pick";

    public PluginMetadata Metadata => new(
        "ColorPick",
        "스포이드 색상 추출 — pick",
        "1.0",
        "AX");

    public Task<IEnumerable<LauncherItem>> GetItemsAsync(string query, CancellationToken ct)
    {
        return Task.FromResult<IEnumerable<LauncherItem>>(
        [
            new LauncherItem(
                "스포이드로 화면 색상 추출",
                "Enter → 스포이드 모드 진입  ·  화면 아무 곳을 클릭하면 색상 코드 추출  ·  Esc 취소",
                null, "__PICK__",
                Symbol: Symbols.ColorPicker)
        ]);
    }

    public async Task ExecuteAsync(LauncherItem item, CancellationToken ct)
    {
        if (item.Data is not string s || s != "__PICK__") return;

        // 런처가 닫히는 동안 대기
        await Task.Delay(200, ct);

        Application.Current?.Dispatcher.Invoke(() =>
        {
            var dropper = new Views.EyeDropperWindow();
            dropper.ShowDialog();

            if (dropper.PickedColor.HasValue)
            {
                var result = new Views.ColorPickResultWindow(
                    dropper.PickedColor.Value,
                    dropper.PickX,
                    dropper.PickY);
                result.Show();
            }
        });
    }
}
