package ui import "fmt" // Commands — отображение действий UI в текстовые команды канала. // // UI — это chat.Channel, поэтому все действия пользователя (кнопки, ввод) // превращаются в текстовые сообщения, которые уходят в Router → Core. Это // сохраняет единый путь команд (спец 12.2): никаких прямых вызовов Core из // виджетов — только текст через канал. type Commands struct { // Submit отправляет текст пользователя в канал (обычно — window.Submit). Submit func(text string) } // NewCommands создаёт Commands с отправкой через fn. func NewCommands(fn func(text string)) *Commands { if fn == nil { fn = func(string) {} } return &Commands{Submit: fn} } // Start — новая задача (/start). func (c *Commands) Start() { c.Submit("/start") } // Cancel — отмена текущей задачи (/cancel). func (c *Commands) Cancel() { c.Submit("/cancel") } // Skip — пропустить сбор, сформировать черновик (/skip). func (c *Commands) Skip() { c.Submit("/skip") } // Retry — перезапустить задачу N (/retry N): полный аналог Telegram-команды. // id <= 0 — no-op (кнопка «Перезапустить» на свободной вкладке неактивна). func (c *Commands) Retry(id int64) { if id <= 0 { return } c.Submit(fmt.Sprintf("/retry %d", id)) } // Status — запросить статус задачи N (/status N). func (c *Commands) Status(id int64) { c.Submit(fmt.Sprintf("/status %d", id)) } // Continue — продолжить задачу N (/continue N). func (c *Commands) Continue(id int64) { c.Submit(fmt.Sprintf("/continue %d", id)) } // Approve — одобрить черновик («создавай»). func (c *Commands) Approve() { c.Submit("создавай") } // SendText — обычное сообщение пользователя (ввод в поле). func (c *Commands) SendText(text string) { c.Submit(text) }