"use client"

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

export const DEMO_MAIL_ROUTE_ROOT = "demo/mail"
export const DEFAULT_MAIL_ROUTE_ROOT = "mail"

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

const DemoMailContext = createContext<DemoMailContextValue | null>(null)

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

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

export function useDemoMail(): DemoMailContextValue | null {
  return useContext(DemoMailContext)
}

export function useIsDemoMail(): boolean {
  return useDemoMail()?.enabled ?? false
}

export function useMailRouteRoot(): string {
  return useDemoMail()?.routeRoot ?? DEFAULT_MAIL_ROUTE_ROOT
}
