import type { VoiceInputState } from "@t3tools/client-runtime/voice-input"; export type VoiceComposerPresentation = { readonly leadingAction: "cancel" | null; readonly trailingAction: "mic" | "confirm"; readonly showsSend: boolean; readonly statusKind: "active" | "error" | null; readonly statusLabel: string | null; readonly confirmationEnabled: boolean; }; export function resolveVoiceComposerPresentation( state: VoiceInputState, elapsedSeconds: number, ): VoiceComposerPresentation { switch (state.phase) { case "idle": return { leadingAction: null, trailingAction: "mic", showsSend: true, statusKind: null, statusLabel: null, confirmationEnabled: false, }; case "error": return { leadingAction: null, trailingAction: "mic", showsSend: true, statusKind: "error", statusLabel: state.error, confirmationEnabled: false, }; case "preparing": return { leadingAction: "cancel", trailingAction: "confirm", showsSend: false, statusKind: "active", statusLabel: "Preparing", confirmationEnabled: false, }; case "recording": { const seconds = Math.max(0, Math.floor(elapsedSeconds)); return { leadingAction: "cancel", trailingAction: "confirm", showsSend: false, statusKind: "active", statusLabel: `Recording ${Math.floor(seconds / 60)}:${String(seconds % 60).padStart(2, "0")}`, confirmationEnabled: true, }; } case "transcribing": return { leadingAction: "cancel", trailingAction: "confirm", showsSend: false, statusKind: "active", statusLabel: "Transcribing", confirmationEnabled: false, }; } }