using AxCopilot.SDK;
using AxCopilot.Services;
using AxCopilot.Themes;
namespace AxCopilot.Handlers;
///
/// Phase L3-9: 뽀모도로 타이머 핸들러. "pomo" 프리픽스로 사용합니다.
///
/// 사용법:
/// pomo → 현재 타이머 상태 표시
/// pomo start → 집중 타이머 시작 (25분)
/// pomo break → 휴식 타이머 시작 (5분)
/// pomo stop → 타이머 중지
/// pomo reset → 타이머 초기화
///
/// Enter → 해당 명령 실행.
///
public class PomoHandler : IActionHandler
{
public string? Prefix => "pomo";
public PluginMetadata Metadata => new(
"Pomodoro",
"뽀모도로 타이머 — pomo",
"1.0",
"AX",
"집중/휴식 타이머를 관리합니다.");
public Task> GetItemsAsync(string query, CancellationToken ct)
{
var q = query.Trim().ToLowerInvariant();
var svc = PomodoroService.Instance;
var items = new List();
// ─── 명령 분기 ────────────────────────────────────────────────────────
if (q is "start" or "focus")
{
items.Add(new LauncherItem("집중 타이머 시작",
$"{svc.FocusMinutes}분 집중 모드 시작 · Enter로 실행",
null, "__START__", Symbol: Symbols.Timer));
return Task.FromResult>(items);
}
if (q is "break" or "rest")
{
items.Add(new LauncherItem("휴식 타이머 시작",
$"{svc.BreakMinutes}분 휴식 모드 시작 · Enter로 실행",
null, "__BREAK__", Symbol: Symbols.Timer));
return Task.FromResult>(items);
}
if (q is "stop" or "pause")
{
items.Add(new LauncherItem("타이머 중지",
"현재 타이머를 중지합니다 · Enter로 실행",
null, "__STOP__", Symbol: Symbols.MediaPlay));
return Task.FromResult>(items);
}
if (q == "reset")
{
items.Add(new LauncherItem("타이머 초기화",
"타이머를 처음 상태로 초기화합니다 · Enter로 실행",
null, "__RESET__", Symbol: Symbols.Restart));
return Task.FromResult>(items);
}
// ─── 기본: 현재 상태 + 명령 목록 ─────────────────────────────────────
var remaining = svc.Remaining;
var timeStr = $"{(int)remaining.TotalMinutes:D2}:{remaining.Seconds:D2}";
var stateStr = svc.Mode switch
{
PomodoroMode.Focus => svc.IsRunning ? $"집중 중 {timeStr} 남음" : $"집중 일시정지 {timeStr} 남음",
PomodoroMode.Break => svc.IsRunning ? $"휴식 중 {timeStr} 남음" : $"휴식 일시정지 {timeStr} 남음",
_ => "대기 중",
};
// 상태 카드
items.Add(new LauncherItem(
"🍅 뽀모도로 타이머",
stateStr,
null, null, Symbol: Symbols.Timer));
// 빠른 명령들
if (!svc.IsRunning)
{
items.Add(new LauncherItem("집중 시작",
$"{svc.FocusMinutes}분 집중 모드 시작 · Enter로 실행",
null, "__START__", Symbol: Symbols.Timer));
}
else
{
items.Add(new LauncherItem("타이머 중지",
"현재 타이머를 중지합니다 · Enter로 실행",
null, "__STOP__", Symbol: Symbols.MediaPlay));
}
if (svc.Mode == PomodoroMode.Focus && svc.IsRunning)
{
items.Add(new LauncherItem("휴식 시작",
$"{svc.BreakMinutes}분 휴식 모드로 전환 · Enter로 실행",
null, "__BREAK__", Symbol: Symbols.Timer));
}
items.Add(new LauncherItem("타이머 초기화",
"타이머를 처음 상태로 초기화합니다 · Enter로 실행",
null, "__RESET__", Symbol: Symbols.Restart));
return Task.FromResult>(items);
}
public Task ExecuteAsync(LauncherItem item, CancellationToken ct)
{
if (item.Data is not string cmd) return Task.CompletedTask;
var svc = PomodoroService.Instance;
switch (cmd)
{
case "__START__": svc.StartFocus(); break;
case "__BREAK__": svc.StartBreak(); break;
case "__STOP__": svc.Stop(); break;
case "__RESET__": svc.Reset(); break;
}
return Task.CompletedTask;
}
}