'use client';
import React, { createContext, useState, useContext, ReactNode } from 'react';
import { AuthContextType, InvestmentHistory, InvestmentSummary, Loan, LoanHistory, SavingsHistory, User, UserSavingsEarnings, UserTransactionsDetails } from '../lib/interfaces';

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

export const AuthProvider = ({ children }: { children: ReactNode }) => {
  const [token, setToken] = useState<string | null>(null);
  const [user, setUser] = useState<User | null>(null);
  const [userTransactionsDetails, setUserTransactionsDetails] = useState<UserTransactionsDetails | null>(null);
  const [investmentSummary, setInvestmentSummary] = useState<InvestmentSummary | null>(null);
  const [userSavingsEarnings, setUserSavingsEarnings] = useState<UserSavingsEarnings[] | null>(null);
  const [userLoanSummary, setUserLoanSummary] = useState<Loan | null>(null);
  const [savingsHistory, setSavingsHistory] = useState<SavingsHistory | null>(null);
  const [investmentHistory, setInvestmentHistory] = useState<InvestmentHistory | null>(null);
  const [loanHistory, setLoanHistory] = useState<LoanHistory | null>(null);

  const logout = () => {
    // Remove token from storage
    localStorage.removeItem("userToken"); // if using cookies, remove cookies too

    // Reset all auth state
    setToken(null);
    setUser(null);
    setUserTransactionsDetails(null);
    setInvestmentSummary(null);
    setUserSavingsEarnings(null);
    setUserLoanSummary(null);
    setSavingsHistory(null);
    setInvestmentHistory(null);
    setLoanHistory(null);
  };

  return (
    <AuthContext.Provider value={{
      token,
      setToken,
      user,
      setUser,
      logout,
      userTransactionsDetails,
      setUserTransactionsDetails,
      investmentSummary,
      setInvestmentSummary,
      userSavingsEarnings,
      setUserSavingsEarnings,
      userLoanSummary,
      setUserLoanSummary,
      savingsHistory,
      setSavingsHistory,
      investmentHistory,
      setInvestmentHistory,
      loanHistory,
      setLoanHistory
    }}>
      {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;
};