"use client"

import { useState, useEffect, useCallback } from 'react'
import { localDB, ProfileData } from '@/lib/local-database'

export interface UseProfileReturn {
  profileData: ProfileData | null
  profileImage: string | null
  isLoading: boolean
  saveProfileImage: (file: File) => Promise<string>
  removeProfileImage: () => void
  updateProfileData: (data: Partial<ProfileData>) => void
  refreshProfile: () => void
}

export function useProfile(): UseProfileReturn {
  const [profileData, setProfileData] = useState<ProfileData | null>(null)
  const [profileImage, setProfileImage] = useState<string | null>(null)
  const [isLoading, setIsLoading] = useState(true)

  // Carregar dados do perfil
  const loadProfile = useCallback(async () => {
    setIsLoading(true)
    try {
      // Criar usuário padrão se não existir
      await localDB.createDefaultUser()
      
      // Carregar dados do perfil
      const data = localDB.getProfileData()
      const image = localDB.getProfileImage()
      
      setProfileData(data)
      setProfileImage(image)
    } catch (error) {
      console.error('Erro ao carregar perfil:', error)
    } finally {
      setIsLoading(false)
    }
  }, [])

  // Salvar imagem de perfil
  const saveProfileImage = useCallback(async (file: File): Promise<string> => {
    try {
      const imageUrl = await localDB.saveProfileImage(file)
      setProfileImage(imageUrl)
      return imageUrl
    } catch (error) {
      console.error('Erro ao salvar imagem:', error)
      throw error
    }
  }, [])

  // Remover imagem de perfil
  const removeProfileImage = useCallback(() => {
    localDB.removeProfileImage()
    setProfileImage(null)
  }, [])

  // Atualizar dados do perfil
  const updateProfileData = useCallback((data: Partial<ProfileData>) => {
    localDB.saveProfileData(data)
    setProfileData(prev => prev ? { ...prev, ...data } : null)
  }, [])

  // Atualizar perfil manualmente
  const refreshProfile = useCallback(() => {
    loadProfile()
  }, [loadProfile])

  // Carregar dados na inicialização
  useEffect(() => {
    loadProfile()
  }, [loadProfile])

  return {
    profileData,
    profileImage,
    isLoading,
    saveProfileImage,
    removeProfileImage,
    updateProfileData,
    refreshProfile
  }
}