/** @jsxImportSource @opentui/solid */ import { buildStatsReport } from "../commands/stats" import type { PluginConfig } from "../config" import { saveManualModeSetting } from "../state/persistence" import { loadSessionData, logger } from "./data" import { ContextDialog, PanelDialog, StatsDialog, StatusDialog } from "./dialogs" import type { TuiApi } from "./types" export function showDialog(api: TuiApi, render: () => any) { api.ui.dialog.setSize("xlarge") api.ui.dialog.replace(render) } export function showStatusDialog(api: TuiApi, title: string, eyebrow: string, message: string) { showDialog(api, () => ( )) } export function showError(api: TuiApi, title: string, error: unknown) { const message = error instanceof Error ? error.message : String(error) showStatusDialog(api, title, "DCP Error", message || "Command failed.") } export function openContextModal(api: TuiApi, config: PluginConfig) { runModal(api, "Context", async () => { const data = await loadSessionData(api, config) if (!data) { showStatusDialog(api, "Context", "No session", "Open a session first.") return } showDialog(api, () => ( openPanelModal(api, config)} /> )) }) } export function openStatsModal(api: TuiApi, config: PluginConfig) { runModal(api, "Stats", async () => { const data = await loadSessionData(api, config) if (!data) { showStatusDialog(api, "Stats", "No session", "Open a session first.") return } const report = await buildStatsReport(data.state, logger) showDialog(api, () => ( openPanelModal(api, config)} /> )) }) } export function openPanelModal(api: TuiApi, config: PluginConfig) { runModal(api, "DCP", async () => { const data = await loadSessionData(api, config) if (!data) { showStatusDialog(api, "DCP", "No session", "Open a session first.") return } showDialog(api, () => ( openContextModal(api, config)} onStats={() => openStatsModal(api, config)} onManual={(enabled) => setManualMode(api, config, data.state.sessionId, enabled)} /> )) }) } function runModal(api: TuiApi, title: string, task: () => Promise) { showStatusDialog(api, title, "DCP", "Loading...") void task().catch((error) => showError(api, title, error)) } async function setManualMode( api: TuiApi, config: PluginConfig, sessionID: string | null | undefined, enabled: boolean, ) { if (!sessionID) return await saveManualModeSetting(sessionID, enabled, logger) openPanelModal(api, config) }