"use client"

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

export const DEMO_CONTACTS_ROUTE_ROOT = "demo/contacts"

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

const DemoContactsContext = createContext<DemoContactsContextValue | null>(null)

export function DemoContactsProvider({
  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<DemoContactsContextValue>(
    () => ({
      enabled: true,
      routeRoot: DEMO_CONTACTS_ROUTE_ROOT,
      reset,
      notify,
    }),
    [reset, notify]
  )

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

export function useDemoContacts(): DemoContactsContextValue | null {
  return useContext(DemoContactsContext)
}

export function useIsDemoContacts(): boolean {
  return useDemoContacts()?.enabled ?? false
}
