"use client"

import {
  createContext,
  useCallback,
  useContext,
  useMemo,
  type ReactNode,
} from "react"
import { toast } from "sonner"

export const DEMO_AGENDA_ROUTE_ROOT = "demo/agenda"

type DemoAgendaContextValue = {
  enabled: true
  routeRoot: typeof DEMO_AGENDA_ROUTE_ROOT
  reset: () => void
  notify: (message: string) => void
}

const DemoAgendaContext = createContext<DemoAgendaContextValue | null>(null)

export function DemoAgendaProvider({
  children,
  onReset,
}: {
  children: ReactNode
  onReset: () => void
}) {
  const notify = useCallback((message: string) => {
    toast.message(message, {
      description: "Mode démo : rien n'est envoyé ni conservé.",
    })
  }, [])

  const reset = useCallback(() => {
    onReset()
    notify("Démo réinitialisée")
  }, [notify, onReset])

  const value = useMemo<DemoAgendaContextValue>(
    () => ({
      enabled: true,
      routeRoot: DEMO_AGENDA_ROUTE_ROOT,
      reset,
      notify,
    }),
    [reset, notify]
  )

  return (
    <DemoAgendaContext.Provider value={value}>{children}</DemoAgendaContext.Provider>
  )
}

export function useDemoAgenda(): DemoAgendaContextValue | null {
  return useContext(DemoAgendaContext)
}

export function useIsDemoAgenda(): boolean {
  return useDemoAgenda()?.enabled ?? false
}
