"use client";

import { useState, useEffect, useCallback, type ReactNode } from "react";
import {
  AuthContext,
  type AuthState,
  loadAuth,
  saveAuth,
  clearAuth,
  validateToken,
} from "@/lib/auth";

export function AuthProvider({ children }: { children: ReactNode }) {
  const [auth, setAuth] = useState<AuthState | null>(null);
  const [loading, setLoading] = useState(true);

  // Load saved auth on mount
  useEffect(() => {
    const saved = loadAuth();
    if (saved?.isAuthenticated) {
      setAuth(saved);
    }
    setLoading(false);
  }, []);

  const login = useCallback(async (serverUrl: string, token: string) => {
    const user = await validateToken(serverUrl, token);
    if (!user) return false;

    const state: AuthState = {
      serverUrl: serverUrl.replace(/\/+$/, ""),
      token,
      user,
      isAuthenticated: true,
    };
    saveAuth(state);
    setAuth(state);
    return true;
  }, []);

  const logout = useCallback(() => {
    clearAuth();
    setAuth(null);
  }, []);

  return (
    <AuthContext value={{ auth, loading, login, logout }}>
      {children}
    </AuthContext>
  );
}
