"use client" import { createContext, useContext, useState, useEffect, type ReactNode } from "react" import { apiFetch } from "@/lib/apiutils" type UserRole = "admin" | "operador" interface User { id: string name: string email: string role: UserRole } interface AuthContextType { user: User | null login: (email: string, password: string) => Promise logout: () => void refreshUser: () => Promise isAuthenticated: boolean } const AuthContext = createContext(undefined) export function AuthProvider({ children }: { children: ReactNode }) { const [user, setUser] = useState(null) useEffect(() => { const checkToken = async () => { const token = localStorage.getItem("token") if (!token) return try { const res = await apiFetch("/user") if (res.ok) { const data = await res.json() setUser(data) } else { localStorage.removeItem("token") setUser(null) } } catch (error) { localStorage.removeItem("token") setUser(null) } } checkToken() }, []) const login = async (email: string, password: string): Promise => { try { const res = await apiFetch("/login", { method: "POST", body: JSON.stringify({ email, password }), }) if (res.ok) { const data = await res.json() localStorage.setItem("token", data.token) setUser(data.user) return true } return false } catch (error) { console.error("Login request failed", error) return false } } const logout = async () => { try { await apiFetch("/logout", { method: "POST" }) } catch (e) { // ignore error on logout } localStorage.removeItem("token") setUser(null) } const refreshUser = async () => { try { const res = await apiFetch("/user") if (res.ok) { const data = await res.json() setUser(data) } } catch (error) { console.error("Failed to refresh user", error) } } return ( {children} ) } export function useAuth() { const context = useContext(AuthContext) if (context === undefined) { throw new Error("useAuth debe usarse dentro de AuthProvider") } return context }