import React, { createContext, useContext, useState, useEffect, ReactNode } from 'react';
import { supabase } from '../services/supabaseClient';
import { DataGuru } from '../types';

interface AuthContextType {
  user: DataGuru | null;
  loading: boolean;
  login: (nip: string, pass: string) => Promise<{ success: boolean; message?: string }>;
  logout: () => void;
}

const AuthContext = createContext<AuthContextType | undefined>(undefined);

export const AuthProvider = ({ children }: { children?: ReactNode }) => {
  const [user, setUser] = useState<DataGuru | null>(null);
  const [loading, setLoading] = useState(true);

  // Check for persisted session
  useEffect(() => {
    const storedUser = localStorage.getItem('sjg_user');
    if (storedUser) {
      setUser(JSON.parse(storedUser));
    }
    setLoading(false);
  }, []);

  const login = async (nip: string, pass: string) => {
    setLoading(true);
    try {
      // Query table 'data_guru'
      const { data, error } = await supabase
        .from('data_guru')
        .select('*')
        .eq('nip', nip)
        .eq('password', pass)
        .single();

      if (error || !data) {
        setLoading(false);
        return { success: false, message: 'NIP atau Password salah' };
      }

      const loggedUser: DataGuru = {
        nip: data.nip,
        nama: data.nama,
        role: data.role,
        wa_guru: data.wa_guru
      };

      setUser(loggedUser);
      localStorage.setItem('sjg_user', JSON.stringify(loggedUser));
      setLoading(false);
      return { success: true };

    } catch (err) {
      setLoading(false);
      return { success: false, message: 'Terjadi kesalahan jaringan' };
    }
  };

  const logout = () => {
    setUser(null);
    localStorage.removeItem('sjg_user');
  };

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

export const useAuth = () => {
  const context = useContext(AuthContext);
  if (context === undefined) {
    throw new Error('useAuth must be used within an AuthProvider');
  }
  return context;
};
