'use client'
import { useState, useEffect, useCallback } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { AdminLogin, AdminRegister, OrderManagement } from '@/backend/route-params';
import { adminLogin, checkAdminSession } from '@/backend/actions/AdminLogin';
import type { AdminLoginInput } from '@/backend/actions/AdminLogin';
import { toast } from "sonner";
import { useAdminSession } from '@/tools/BackendSession';

export interface AdminLoginState {
  /** 表单数据 */
  formData: AdminLoginInput;
  /** 是否显示密码 */
  showPassword: boolean;
  /** 是否正在提交登录 */
  isLoading: boolean;
  /** 是否正在检查会话状态 */
  isCheckingSession: boolean;
  /** 系统提示消息（错误或成功） */
  systemMessage: { type: 'error' | 'success', text: string } | null;
}

export interface AdminLoginHandlers {
  /** 处理输入框内容变化 */
  handleFormChange: <K extends keyof AdminLoginInput>(field: K, value: AdminLoginInput[K]) => void;
  /** 切换密码显示/隐藏 */
  togglePasswordVisibility: () => void;
  /** 处理登录表单提交 */
  handleSubmit: (e: React.FormEvent) => Promise<void>;
  /** 跳转至注册页面 */
  handleNavigateToRegister: () => void;
}

export function useAdminLogin(): {
  state: AdminLoginState;
  handlers: AdminLoginHandlers;
} {
  const router = useRouter();
  const searchParams = useSearchParams();
  const sessionStore = useAdminSession();

  // ===== State =====
  const [formData, setFormData] = useState<AdminLoginInput>({
    accountUser_account: '',
    accountUser_password: ''
  });
  const [showPassword, setShowPassword] = useState(false);
  const [isLoading, setIsLoading] = useState(false);
  const [isCheckingSession, setIsCheckingSession] = useState(true);
  const [systemMessage, setSystemMessage] = useState<{ type: 'error' | 'success', text: string } | null>(null);

  // ===== Effects =====
  useEffect(() => {
    let isMounted = true;
    
    const verifySession = async () => {
      try {
        const result = await checkAdminSession();
        if (isMounted) {
          if (result.session_isLoggedIn) {
            OrderManagement.navigateToDefault(router);
          } else {
            setIsCheckingSession(false);
          }
        }
      } catch (error) {
        if (isMounted) {
          setIsCheckingSession(false);
        }
      }
    };

    verifySession();

    return () => {
      isMounted = false;
    };
  }, [router]);

  // ===== Handlers =====
  const handleFormChange = useCallback(<K extends keyof AdminLoginInput>(field: K, value: AdminLoginInput[K]) => {
    setFormData(prev => ({ ...prev, [field]: value }));
    if (systemMessage?.type === 'error') {
      setSystemMessage(null);
    }
  }, [systemMessage]);

  const togglePasswordVisibility = useCallback(() => {
    setShowPassword(prev => !prev);
  }, []);

  const handleSubmit = async (e: React.FormEvent) => {
    e.preventDefault();
    setSystemMessage(null);

    const account = formData.accountUser_account.trim();
    if (!account || !formData.accountUser_password) {
      const msg = 'يرجى إدخال اسم الحساب وكلمة المرور';
      setSystemMessage({ type: 'error', text: msg });
      toast.error(msg);
      return;
    }

    setIsLoading(true);
    try {
      const result = await adminLogin(formData);
      
      sessionStore.set({
        token: result.token,
        user_id: result.accountUser_id,
        username: result.accountUser_account
      });

      const successMsg = 'تم تسجيل الدخول بنجاح';
      setSystemMessage({ type: 'success', text: successMsg });
      toast.success(successMsg);
      
      OrderManagement.navigateToDefault(router);
    } catch (error: any) {
      const errorMsg = error.message || 'بيانات الدخول غير صحيحة';
      setSystemMessage({ type: 'error', text: errorMsg });
      toast.error(errorMsg);
    } finally {
      setIsLoading(false);
    }
  };

  const handleNavigateToRegister = useCallback(() => {
    AdminRegister.navigateTo(router);
  }, [router]);

  return {
    state: {
      formData,
      showPassword,
      isLoading,
      isCheckingSession,
      systemMessage
    },
    handlers: {
      handleFormChange,
      togglePasswordVisibility,
      handleSubmit,
      handleNavigateToRegister
    }
  };
}