'use client';

import { useState } from "react";
import { useRouter } from "next/navigation";
import ModalCloseSvg from "../svgs/closexsvg";

type Props = {
  open: boolean;
  onClose: () => void;
  onConfirm?: () => void;
};

export default function AccountDeleteModal({ open, onClose, onConfirm }: Props) {
  const router = useRouter();
  const [isLoading, setIsLoading] = useState(false);

  const handleConfirm = async () => {
    if (onConfirm) {
      onConfirm();
      return;
    }

    setIsLoading(true);
    try {
      const token = localStorage.getItem('token');
      if (!token) {
        alert('로그인이 필요합니다.');
        setIsLoading(false);
        onClose();
        router.push('/login');
        return;
      }

      console.log('회원 탈퇴 요청 시작, 토큰 존재:', !!token);
      console.log('토큰 길이:', token?.length);
      console.log('토큰 시작 부분:', token?.substring(0, 20));
      
      const response = await fetch('https://hrdi.coconutmeet.net/auth/delete/me', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          Authorization: `Bearer ${token}`,
        },
      });
      
      console.log('회원 탈퇴 응답 상태:', response.status);

      if (!response.ok) {
        let errorMessage = `회원 탈퇴 실패 (${response.status})`;
        try {
          const errorData = await response.json();
          console.error('회원 탈퇴 API 오류 응답:', errorData);
          if (errorData.error) {
            errorMessage = errorData.error;
          } else if (errorData.message) {
            errorMessage = errorData.message;
          } else if (errorData.errorMessage) {
            errorMessage = errorData.errorMessage;
          } else if (response.statusText) {
            errorMessage = `${response.statusText} (${response.status})`;
          }
        } catch (parseError) {
          console.error('응답 파싱 오류:', parseError);
          if (response.statusText) {
            errorMessage = `${response.statusText} (${response.status})`;
          }
        }
        console.error('회원 탈퇴 실패:', errorMessage, '상태 코드:', response.status);
        alert(errorMessage);
        setIsLoading(false);
        return;
      }

      // 성공 시 토큰 제거 및 로그인 페이지로 이동
      localStorage.removeItem('token');
      onClose();
      router.push('/login');
    } catch (error) {
      const errorMessage = error instanceof Error ? error.message : '네트워크 오류가 발생했습니다.';
      console.error('회원 탈퇴 오류:', errorMessage);
      alert(errorMessage);
      setIsLoading(false);
    }
  };

  if (!open) return null;

  return (
    <div
      className="fixed inset-0 z-50 flex items-center justify-center bg-black/40 backdrop-blur-[2px]"
      role="dialog"
      aria-modal="true"
    >
      <div className="w-[528px] rounded-[12px] border border-[#dee1e6] bg-white shadow-[0_10px_30px_rgba(0,0,0,0.06)]">
        {/* header */}
        <div className="flex items-center justify-between p-6">
          <h2 className="text-[20px] font-bold leading-normal text-[#333c47]">회원 탈퇴</h2>
          <button
            type="button"
            aria-label="닫기"
            onClick={onClose}
            className="inline-flex size-6 items-center justify-center text-[#333c47] hover:opacity-80 cursor-pointer"
          >
            <ModalCloseSvg />
          </button>
        </div>

        {/* body */}
        <div className="px-6">
          <div className="rounded-[16px] border border-[#dee1e6] bg-gray-50 p-6">
            <p className="mb-3 text-[15px] font-bold leading-normal text-basic-text">
              회원 탈퇴 시 유의사항을 확인해주세요.
            </p>
            <div className="text-[15px] leading-normal text-basic-text">
              <p className="mb-0">- 탈퇴 후에도 재가입은 가능합니다.</p>
              <p className="mb-0">- 수강 및 학습 이력이 모두 삭제되며, 복구가 불가능합니다.</p>
              <p>- 수강 서비스 이용 권한이 즉시 종료됩니다.</p>
            </div>
          </div>
        </div>

        {/* footer */}
        <div className="flex items-center justify-center gap-3 p-6">
          <button
            type="button"
            onClick={onClose}
            className="h-12 w-[136px] rounded-[10px] bg-[#f1f3f5] px-4 text-[16px] font-semibold leading-normal text-basic-text cursor-pointer"
          >
            취소
          </button>
          <button
            type="button"
            onClick={handleConfirm}
            disabled={isLoading}
            className="h-12 w-[136px] rounded-[10px] bg-red-50 px-4 text-[16px] font-semibold leading-normal text-error cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed"
          >
            {isLoading ? '처리 중...' : '회원 탈퇴'}
          </button>
        </div>
      </div>
    </div>
  );
}


