"use client";

import { createContext, useContext, useState, type ReactNode } from "react";
import type { OpenPositionResolved } from "@/lib/positions";
import { HireWizard } from "./HireWizard";

type Location = { id: string; name: string; country: string };
type HireDraft = { id: string; step: number; payload: Record<string, unknown> };

type HireWizardContextValue = {
  openWizard: (draftId?: string) => void;
};

const HireWizardContext = createContext<HireWizardContextValue | null>(null);

export function HireWizardProvider({
  children,
  openPositions,
  locations,
  drafts,
}: {
  children: ReactNode;
  openPositions: OpenPositionResolved[];
  locations: Location[];
  drafts: HireDraft[];
}) {
  const [open, setOpen] = useState(false);
  const [resumeDraft, setResumeDraft] = useState<HireDraft | null>(null);

  function openWizard(draftId?: string) {
    setResumeDraft(draftId ? (drafts.find((d) => d.id === draftId) ?? null) : null);
    setOpen(true);
  }

  return (
    <HireWizardContext.Provider value={{ openWizard }}>
      {children}
      <HireWizard
        open={open}
        onClose={() => setOpen(false)}
        openPositions={openPositions}
        locations={locations}
        resumeDraft={resumeDraft}
      />
    </HireWizardContext.Provider>
  );
}

export function useHireWizard(): HireWizardContextValue {
  const ctx = useContext(HireWizardContext);
  if (!ctx) throw new Error("useHireWizard must be used within a HireWizardProvider");
  return ctx;
}
