export const useSideBar = () => useState<boolean>('sideBar', () => false)
export const useSideBarCollapsed = () => useState<boolean>('sideBarCollapsed', () => false)
export const useSideBarScroll = () => useState<number>('sideBarScroll', () => 0)
export const useTabs = () => useState<any[]>('tabs', () => [{link: '/', text: 'Home', active: true}])
export const useActiveMenu = () => useState<string>('activeMenu', () => '')
export const useActiveSubMenu = () => useState<string>('activeSubMenu', () => '')
export const useActiveSubChildMenu = () => useState<string>('activeSubChildMenu', () => '')
export const useActiveSave = () => useState<boolean>('activeSave', () => false)
export const usePrintPreview = () => useState<boolean>('printPreview', () => false)
export const usePrintParam = () => useState<any>('printParam', () => {})
export const useAttachmentPreview = () => useState<boolean>('attachmentPreview', () => false)
export const useAttachmentParam = () => useState<any>('attachmentParam', () => {})
export const useQuickView = () => useState<string>('quickView', () => '')
export const useQuickViewParam = () => useState<any>('quickViewParam', () => {})
export const useWindowFrom = () => useState<string>('windowFrom', () => '')
export const useWindowParam = () => useState<any>('windowParam', () => {})
export const useGenerateShipments = () => useState<any>('generateShipments', () => {})
export const useGenerateShipmentActive = () => useState<boolean>('generateShipmentActive', () => false)
export const useGenerateInvoices = () => useState<any>('generateInvoices', () => {})
export const useGenerateInvoiceActive = () => useState<boolean>('generateInvoiceActive', () => false)
export const useDataTableFilters = () => useState<any>('dataTableFilters', () => {})
export const useBoMTab = () => useState<string>('boMTab', () => 'bom')
export const useBoMActive = () => useState<boolean>('boMActive', () => false)
export const useBoM = () => useState<any>('boM', () => {})
export const useEmailInvoice = () => useState<boolean>('emailInvoice', () => false)
export const useEmailInvoiceParam = () => useState<any>('emailInvoiceParam', () => {})
export const usePaymentReminder = () => useState<boolean>('paymentReminder', () => false)
export const usePaymentReminderParam = () => useState<any>('paymentReminderParam', () => {})
export const useBatchPrintPreview = () => useState<boolean>('batchPrintPreview', () => false)
export const useBatchPrintParam = () => useState<any[]>('batchPrintParam', () => [])
export const useStockReportEmail = () => useState<boolean>('stockReportEmail', () => false)
export const useStockReportEmailParam = () => useState<any>('stockReportEmailParam', () => {})
export const useTransactionReportEmail = () => useState<boolean>('transactionReportEmail', () => false)
export const useTransactionReportEmailParam = () => useState<any>('transactionReportEmailParam', () => {})
export const useMarginReportEmail = () => useState<boolean>('marginReportEmail', () => false)
export const useMarginReportEmailParam = () => useState<any>('marginReportEmailParam', () => {})
export const useQuickPayment = () => useState<boolean>('quickPayment', () => false)
export const useQuickPaymentParam = () => useState<any>('quickPaymentParam', () => {})
export const useReminderNotes = () => useState<boolean>('reminderNotes', () => false)
export const useReminderNotesParam = () => useState<any>('reminderNotesParam', () => ({}))
// Order comparison modal — current order vs. previous completed order of the same partner.
export const useOrderCompare = () => useState<boolean>('orderCompare', () => false)
export const useOrderCompareParam = () => useState<any>('orderCompareParam', () => ({}))
export const useMarketplaceConfirmLog = () => useState<boolean>('marketplaceConfirmLog', () => false)
export const useMarketplaceConfirmLogParam = () => useState<any>('marketplaceConfirmLogParam', () => ({}))
export const useOpenShipmentsModal = () => useState<boolean>('openShipmentsModal', () => false)
export const useOpenShipmentsModalParam = () => useState<any>('openShipmentsModalParam', () => ({}))
// Dashboard "Picking" picklist generator (sort options + server/download output).
export const usePicklistModal = () => useState<boolean>('picklistModal', () => false)
export const usePicklistModalParam = () => useState<any>('picklistModalParam', () => ({}))
export const useOpenOrdersModal = () => useState<boolean>('openOrdersModal', () => false)
export const useOpenOrdersModalParam = () => useState<any>('openOrdersModalParam', () => ({}))

// Staff live-chat module state (all additive; safe to remove with the module).
export const useChatOpen = () => useState<boolean>('chatOpen', () => false)
export const useChatActivePeer = () => useState<number | null>('chatActivePeer', () => null)
export const useChatPresence = () => useState<Record<number, 'online' | 'away' | 'offline'>>('chatPresence', () => ({}))
export const useChatUnread = () => useState<Record<number, number>>('chatUnread', () => ({}))
export const useChatConnected = () => useState<boolean>('chatConnected', () => false)
export const useChatThreads = () => useState<Record<number, any[]>>('chatThreads', () => ({}))
// Per-peer "is typing" flags (ephemeral, never persisted).
export const useChatTyping = () => useState<Record<number, boolean>>('chatTyping', () => ({}))
// Pending ERP-entity share waiting to be sent into a conversation:
// { kind:'entity', entityType, entityId, label, url } | null.
export const useChatShare = () => useState<any>('chatShare', () => null)
// Inbound-sound mute preference (seeded from localStorage on the client).
export const useChatSoundMuted = () => useState<boolean>('chatSoundMuted', () => false)

export interface ActiveTaskTimerState {
  running: boolean
  paused: boolean
  startTime: number | null
  pausedElapsedMs: number
  categoryName: string
  orgName: string
}
export const useActiveTaskTimer = () => useState<ActiveTaskTimerState>('activeTaskTimer', () => ({
  running: false,
  paused: false,
  startTime: null,
  pausedElapsedMs: 0,
  categoryName: '',
  orgName: ''
}))
// Dunning gate (TerminationGuard): null = not yet fetched; else the
// /api/invoices/termination-status response { notice, terminated, invoices, totalOpen, sessionKey }.
export const useTerminationStatus = () => useState<any>('terminationStatus', () => null)
