'use client';

import { useState, useCallback } from 'react';
import { userApi } from '@/entities/user';
import type {
  ProfileResponse,
  UpdateProfileRequest,
  ChangePasswordRequest,
} from '@/entities/user';

/**
 * 프로필 관련 커스텀 훅
 */
export const useProfile = () => {
  const [profile, setProfile] = useState<ProfileResponse | null>(null);
  const [isLoading, setIsLoading] = useState(false);
  const [error, setError] = useState<string | null>(null);

  // 프로필 조회
  const fetchProfile = useCallback(async () => {
    setIsLoading(true);
    setError(null);
    try {
      const data = await userApi.getProfile();
      setProfile(data);
      return { success: true, data };
    } catch (err) {
      const errorMessage =
        err instanceof Error ? err.message : '프로필 조회에 실패했습니다.';
      setError(errorMessage);
      return { success: false, error: errorMessage };
    } finally {
      setIsLoading(false);
    }
  }, []);

  // 프로필 수정
  const updateProfile = useCallback(async (data: UpdateProfileRequest) => {
    setIsLoading(true);
    setError(null);
    try {
      const updatedProfile = await userApi.updateProfile(data);
      setProfile(updatedProfile);
      return { success: true, data: updatedProfile };
    } catch (err) {
      const errorMessage =
        err instanceof Error ? err.message : '프로필 수정에 실패했습니다.';
      setError(errorMessage);
      return { success: false, error: errorMessage };
    } finally {
      setIsLoading(false);
    }
  }, []);

  // 비밀번호 변경
  const changePassword = useCallback(async (data: ChangePasswordRequest) => {
    setIsLoading(true);
    setError(null);
    try {
      await userApi.changePassword(data);
      return { success: true };
    } catch (err) {
      const errorMessage =
        err instanceof Error ? err.message : '비밀번호 변경에 실패했습니다.';
      setError(errorMessage);
      return { success: false, error: errorMessage };
    } finally {
      setIsLoading(false);
    }
  }, []);

  return {
    profile,
    isLoading,
    error,
    fetchProfile,
    updateProfile,
    changePassword,
  };
};
