
import { useState } from "react";
import { useNavigate } from "react-router-dom";
import { useToast } from "@/hooks/useToast.wrapper";
import { useAuth } from "@/contexts/auth";
import { useTableSetup } from "@/hooks/useTableSetup";

export function useLogin() {
  const [email, setEmail] = useState("");
  const [password, setPassword] = useState("");
  const [showPassword, setShowPassword] = useState(false);
  const [isLoading, setIsLoading] = useState(false);
  const [loginError, setLoginError] = useState<string | null>(null);
  
  const navigate = useNavigate();
  const { toast } = useToast();
  const { signIn } = useAuth();
  const { isSettingUpTables, setupTables } = useTableSetup();

  const handleLogin = async (e: React.FormEvent) => {
    e.preventDefault();
    setLoginError(null);
    
    if (!email || !password) {
      toast({
        title: "입력 오류",
        description: "이메일과 비밀번호를 모두 입력해주세요.",
        variant: "destructive"
      });
      return;
    }
    
    setIsLoading(true);

    try {
      const { error, user } = await signIn(email, password);
      
      if (error) {
        console.error("로그인 실패:", error);
        
        let errorMessage = "로그인에 실패했습니다.";
        
        if (error.message) {
          if (error.message.includes("Invalid login credentials")) {
            errorMessage = "이메일 또는 비밀번호가 올바르지 않습니다.";
          } else if (error.message.includes("Email not confirmed")) {
            errorMessage = "이메일 인증이 완료되지 않았습니다. 이메일을 확인해주세요.";
          } else {
            errorMessage = `오류: ${error.message}`;
          }
        }
        
        setLoginError(errorMessage);
        
        toast({
          title: "로그인 실패",
          description: errorMessage,
          variant: "destructive"
        });
      } else if (user) {
        // 로그인 성공
        toast({
          title: "로그인 성공",
          description: "환영합니다! 대시보드로 이동합니다.",
          variant: "default"
        });
        
        await setupTables();
        navigate("/");
      } else {
        // user가 없지만 error도 없는 경우 (드문 경우)
        console.warn("로그인 성공했지만 사용자 정보가 없습니다.");
        
        toast({
          title: "로그인 상태 확인 중",
          description: "로그인은 성공했지만 사용자 정보를 확인하지 못했습니다. 페이지를 새로고침해보세요.",
          variant: "default"
        });
        
        navigate("/");
      }
    } catch (err: any) {
      console.error("로그인 과정에서 예외 발생:", err);
      
      const errorMessage = err.message || "알 수 없는 오류가 발생했습니다.";
      setLoginError(errorMessage);
      
      toast({
        title: "로그인 오류",
        description: errorMessage,
        variant: "destructive"
      });
    } finally {
      setIsLoading(false);
    }
  };

  return {
    email,
    setEmail,
    password,
    setPassword,
    showPassword,
    setShowPassword,
    isLoading,
    isSettingUpTables,
    loginError,
    setLoginError,
    handleLogin
  };
}
