"use client"

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

export const DEMO_DRIVE_ROUTE_ROOT = "demo/drive"
export const DEFAULT_DRIVE_ROUTE_ROOT = "drive"

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

const DemoDriveContext = createContext<DemoDriveContextValue | null>(null)

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

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

export function useDemoDrive(): DemoDriveContextValue | null {
  return useContext(DemoDriveContext)
}

export function useIsDemoDrive(): boolean {
  return useDemoDrive()?.enabled ?? false
}
