'use client';
import { createContext, useContext, useEffect, useState, ReactNode } from 'react';
import { useRouter } from 'next/navigation';
import { api } from './api';

export type Role = 'super_admin' | 'admin' | 'stakeholder' | 'employee';
export interface OrgRef { id: number; name: string; slug: string; }
export interface User { id: number; email: string; name: string; role: Role; department_id: number | null; organisation_id: number | null; organisation?: OrgRef | null; stakeholder?: any; department_name?: string; }

const Ctx = createContext<{ user: User | null; loading: boolean; refresh: () => Promise<void>; logout: () => Promise<void> }>({
  user: null, loading: true, refresh: async () => {}, logout: async () => {},
});

export function AuthProvider({ children }: { children: ReactNode }) {
  const [user, setUser] = useState<User | null>(null);
  const [loading, setLoading] = useState(true);
  const router = useRouter();
  const refresh = async () => {
    try { const r = await api.get('/api/v1/auth/me'); setUser(r.user); }
    catch { setUser(null); }
    finally { setLoading(false); }
  };
  useEffect(() => { refresh(); }, []);
  const logout = async () => { await api.post('/api/v1/auth/logout'); setUser(null); router.push('/login'); };
  return <Ctx.Provider value={{ user, loading, refresh, logout }}>{children}</Ctx.Provider>;
}
export const useAuth = () => useContext(Ctx);
