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

namespace AxCopilot.Handlers;

/// <summary>
/// 이모지 피커 핸들러. "emoji" 프리픽스로 사용합니다.
/// 예: emoji 하트  →  ❤️ 검색
///     emoji wave  →  👋 검색
///     emoji       →  자주 쓰는 이모지 목록
/// </summary>
public partial class EmojiHandler : IActionHandler
{
    public string? Prefix => "emoji";

    public PluginMetadata Metadata => new(
        "Emoji",
        "이모지 피커 — emoji 뒤에 이름 입력",
        "1.0",
        "AX");

    public Task<IEnumerable<LauncherItem>> GetItemsAsync(string query, CancellationToken ct)
    {
        IEnumerable<(string Emoji, string Name, string Tags)> matches;

        if (string.IsNullOrWhiteSpace(query))
        {
            // 기본 화면: 자주 쓰는 이모지 30개
            matches = _emojis.Take(30);
        }
        else
        {
            var q = query.Trim().ToLowerInvariant();
            matches = _emojis
                .Where(e => e.Name.Contains(q, StringComparison.OrdinalIgnoreCase)
                         || e.Tags.Contains(q, StringComparison.OrdinalIgnoreCase)
                         || e.Emoji.Contains(q))
                .Take(20);
        }

        var items = matches.Select(e => new LauncherItem(
            $"{e.Emoji}  {e.Name}",
            "Enter로 클립보드에 복사",
            null,
            e.Emoji,
            Symbol: Symbols.Emoji)).ToList();

        if (!items.Any() && !string.IsNullOrWhiteSpace(query))
        {
            items.Add(new LauncherItem(
                "검색 결과 없음",
                $"'{query}'에 해당하는 이모지가 없습니다",
                null, null, Symbol: Symbols.Info));
        }

        return Task.FromResult<IEnumerable<LauncherItem>>(items);
    }

    public Task ExecuteAsync(LauncherItem item, CancellationToken ct)
    {
        if (item.Data is string emoji)
        {
            try { Clipboard.SetText(emoji); }
            catch (Exception) { }
        }
        return Task.CompletedTask;
    }
}
