'use client'

import React, { createContext, useContext, useState, ReactNode } from 'react'

// Type utilisateur
export interface User {
  id: number
  name: string
  email: string
  phone: string
  status: string
  affiliate: string | null
  is_vendor: boolean
  is_affiliate: boolean
  created_at: string
  updated_at: string
  discount: string
}

interface UserContextType {
  user: User | null
  setUser: (user: User | null) => void
  loading: boolean
  error: string | null
  refetchUser: () => Promise<void>
}

const UserContext = createContext<UserContextType | undefined>(undefined)

export function UserProvider({ children }: { children: ReactNode }) {
  const [user, setUser] = useState<User | null>(null)
  const [loading, setLoading] = useState(true)
  const [error, setError] = useState<string | null>(null)

  const fetchUser = async () => {
    setLoading(true)
    setError(null)
    try {
      const res = await fetch('/api/check-user', { credentials: 'include' })
      const data = await res.json()
      if (data.success && data.user) {
        setUser(data.user)
      } else {
        setUser(null)
        setError('User not authenticated')
      }
    } catch {
      setUser(null)
      setError('Error while fetching user')
    } finally {
      setLoading(false)
    }
  }

  return (
    <UserContext.Provider
      value={{ user, setUser, loading, error, refetchUser: fetchUser }}
    >
      {children}
    </UserContext.Provider>
  )
}

export function useUser() {
  const context = useContext(UserContext)
  if (context === undefined) {
    throw new Error('useUser must be used within a UserProvider')
  }
  return context
}
