'use client';

import React, { createContext, useContext, useState, useEffect } from 'react';
import { User } from '@/types';

interface AuthContextType {
  user: User | null;
  isAdmin: boolean;
  isLoading: boolean;
  login: (email: string, role?: 'admin' | 'user' | string) => void;
  logout: () => void;
  updateUser: (data: Partial<User>) => void;
}

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

export function AuthProvider({ children }: { children: React.ReactNode }) {
  // Default to null (logged out guest)
  const [user, setUser] = useState<User | null>(null);
  const [isLoading, setIsLoading] = useState(true);

  useEffect(() => {
    // Clear old legacy demo storage key if present
    if (typeof window !== 'undefined') {
      if (localStorage.getItem('tz_user')) {
        localStorage.removeItem('tz_user');
      }

      // Load from local storage if previously logged in
      const saved = localStorage.getItem('hn_user');
      if (saved) {
        try {
          setUser(JSON.parse(saved));
        } catch (e) {
          console.error(e);
          localStorage.removeItem('hn_user');
        }
      }
      setIsLoading(false);
    }
  }, []);

  const login = (email: string, role: 'admin' | 'user' | string = 'user') => {
    let u: User;
    const cleanEmail = email.toLowerCase().trim();

    if (role === 'admin' || cleanEmail === 'admin@hostneko.com' || cleanEmail === 'support@hostneko.com') {
      u = {
        id: 'usr-admin',
        name: 'HN HostNeko Admin',
        email: cleanEmail || 'Support@HostNeko.com',
        role: 'admin',
        badge: 'Admin',
        phone: '+8801613545993',
        avatar: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=100&q=80',
        created_at: '2026-01-01T00:00:00Z',
      };
    } else if (cleanEmail === 'teamrafi69@gmail.com') {
      u = {
        id: 'usr-teamrafi',
        name: 'Team Rafi',
        email: 'teamrafi69@gmail.com',
        role: 'user',
        badge: 'Verified Buyer',
        phone: '+8801613545993',
        avatar: 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=100&q=80',
        created_at: '2026-05-10T11:20:00Z',
      };
    } else {
      u = {
        id: `usr-${Date.now()}`,
        name: email.split('@')[0].replace(/[^a-zA-Z0-9]/g, ' ') || 'HostNeko Client',
        email: email,
        role: 'user',
        badge: 'Verified Buyer',
        phone: '+8801613545993',
        avatar: 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=100&q=80',
        created_at: new Date().toISOString(),
      };
    }

    setUser(u);
    localStorage.setItem('hn_user', JSON.stringify(u));
  };

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

  const updateUser = (data: Partial<User>) => {
    if (!user) return;
    const updated = { ...user, ...data };
    setUser(updated);
    localStorage.setItem('hn_user', JSON.stringify(updated));
  };

  const isAdmin = user?.role === 'admin';

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

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