/** @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) { const dialog = (api as any).ui?.dialog if (typeof dialog?.show === "function") { // OpenCode 2.x: show(render) + set(options). dialog.set({ size: "xlarge" }) dialog.show(render) return } // OpenCode 1.x: setSize + replace. dialog.setSize("xlarge") 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 rust 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 rust", async () => { const data = await loadSessionData(api, config) if (!data) { showStatusDialog(api, "DCP rust", "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 rust", "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) }