"use client";

import { useState, useCallback, useEffect } from "react";
import { api } from "@/lib/api-client";

interface AuthUser {
  id: string;
  phone: string;
  countryCode: string;
  kycStatus: string;
}

interface AuthState {
  user: AuthUser | null;
  activeSession: {
    id: string;
    status?: string;
    stepData?: Record<string, unknown>;
  } | null;
  loading: boolean;
}

export function useAuth() {
  const [state, setState] = useState<AuthState>({
    user: null,
    activeSession: null,
    loading: true,
  });

  const checkAuth = useCallback(async () => {
    try {
      const data = await api.auth.me();
      setState({
        user: data,
        activeSession: data.activeSession ?? null,
        loading: false,
      });
      return data;
    } catch {
      try {
        await api.auth.logout();
      } catch {
        // ignore logout failures
      }
      setState({ user: null, activeSession: null, loading: false });
      return null;
    }
  }, []);

  useEffect(() => {
    checkAuth();
  }, [checkAuth]);

  const requestOtp = useCallback(async (phone: string) => {
    return api.auth.requestOtp(phone);
  }, []);

  const verify = useCallback(async (phone: string, code: string) => {
    const data = await api.auth.verify(phone, code);
    await checkAuth();
    return data;
  }, [checkAuth]);

  return {
    ...state,
    requestOtp,
    verify,
    checkAuth,
    isAuthenticated: !!state.user,
  };
}
