import { createContext, useCallback, useContext, useState, type ReactNode } from "react"; interface NewIssueDefaults { status?: string; priority?: string; projectId?: string; assigneeAgentId?: string; } interface NewGoalDefaults { parentId?: string; } interface DialogContextValue { newIssueOpen: boolean; newIssueDefaults: NewIssueDefaults; openNewIssue: (defaults?: NewIssueDefaults) => void; closeNewIssue: () => void; newProjectOpen: boolean; openNewProject: () => void; closeNewProject: () => void; newGoalOpen: boolean; newGoalDefaults: NewGoalDefaults; openNewGoal: (defaults?: NewGoalDefaults) => void; closeNewGoal: () => void; newAgentOpen: boolean; openNewAgent: () => void; closeNewAgent: () => void; onboardingOpen: boolean; openOnboarding: () => void; closeOnboarding: () => void; } const DialogContext = createContext(null); export function DialogProvider({ children }: { children: ReactNode }) { const [newIssueOpen, setNewIssueOpen] = useState(false); const [newIssueDefaults, setNewIssueDefaults] = useState({}); const [newProjectOpen, setNewProjectOpen] = useState(false); const [newGoalOpen, setNewGoalOpen] = useState(false); const [newGoalDefaults, setNewGoalDefaults] = useState({}); const [newAgentOpen, setNewAgentOpen] = useState(false); const [onboardingOpen, setOnboardingOpen] = useState(false); const openNewIssue = useCallback((defaults: NewIssueDefaults = {}) => { setNewIssueDefaults(defaults); setNewIssueOpen(true); }, []); const closeNewIssue = useCallback(() => { setNewIssueOpen(false); setNewIssueDefaults({}); }, []); const openNewProject = useCallback(() => { setNewProjectOpen(true); }, []); const closeNewProject = useCallback(() => { setNewProjectOpen(false); }, []); const openNewGoal = useCallback((defaults: NewGoalDefaults = {}) => { setNewGoalDefaults(defaults); setNewGoalOpen(true); }, []); const closeNewGoal = useCallback(() => { setNewGoalOpen(false); setNewGoalDefaults({}); }, []); const openNewAgent = useCallback(() => { setNewAgentOpen(true); }, []); const closeNewAgent = useCallback(() => { setNewAgentOpen(false); }, []); const openOnboarding = useCallback(() => { setOnboardingOpen(true); }, []); const closeOnboarding = useCallback(() => { setOnboardingOpen(false); }, []); return ( {children} ); } export function useDialog() { const ctx = useContext(DialogContext); if (!ctx) { throw new Error("useDialog must be used within DialogProvider"); } return ctx; }