import React, { createContext, useContext, useState } from "react";

export type VerificationStep = "register" | "id-capture" | "face-verify" | "verified";

export interface RegistrationData {
  name: string;
  email: string;
  country: string;
  countryName: string;
}

export interface VerificationResult {
  match: boolean;
  confidence: "high" | "medium" | "low";
  reason: string;
}

interface VerificationState {
  step: VerificationStep;
  registration: RegistrationData | null;
  idImage: string | null;
  faceImage: string | null;
  result: VerificationResult | null;
  setStep: (step: VerificationStep) => void;
  setRegistration: (data: RegistrationData) => void;
  setIdImage: (uri: string) => void;
  setFaceImage: (uri: string) => void;
  setResult: (result: VerificationResult) => void;
  reset: () => void;
}

const VerificationContext = createContext<VerificationState | null>(null);

export function VerificationProvider({ children }: { children: React.ReactNode }) {
  const [step, setStep] = useState<VerificationStep>("register");
  const [registration, setRegistration] = useState<RegistrationData | null>(null);
  const [idImage, setIdImage] = useState<string | null>(null);
  const [faceImage, setFaceImage] = useState<string | null>(null);
  const [result, setResult] = useState<VerificationResult | null>(null);

  const reset = () => {
    setStep("register");
    setRegistration(null);
    setIdImage(null);
    setFaceImage(null);
    setResult(null);
  };

  return (
    <VerificationContext.Provider
      value={{
        step,
        registration,
        idImage,
        faceImage,
        result,
        setStep,
        setRegistration,
        setIdImage,
        setFaceImage,
        setResult,
        reset,
      }}
    >
      {children}
    </VerificationContext.Provider>
  );
}

export function useVerification() {
  const ctx = useContext(VerificationContext);
  if (!ctx) throw new Error("useVerification must be used inside VerificationProvider");
  return ctx;
}
