'use client'

import { useState } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { AdminRegister, AdminLogin } from '@/backend/route-params';
import type { RegisterAdminInput } from '@/backend/actions/AdminRegister';
import { registerAdmin } from '@/backend/actions/AdminRegister';
import { toast } from "sonner";
import type React from 'react';

export interface AdminRegisterState {
  /** 表单数据 */
  formData: RegisterAdminInput;
  /** 加载状态 */
  isLoading: boolean;
  /** 错误信息 */
  errorMessage: string | null;
  /** 是否显示密码 */
  showPassword: boolean;
}

export interface AdminRegisterHandlers {
  /** 处理表单字段变化 */
  handleFormFieldChange: <K extends keyof RegisterAdminInput>(field: K, value: RegisterAdminInput[K]) => void;
  /** 处理表单提交 */
  handleSubmit: (e: React.FormEvent) => Promise<void>;
  /** 切换密码可见性 */
  toggleShowPassword: () => void;
  /** 跳转到登录页面 */
  handleNavigateToLogin: () => void;
}

export const useAdminRegister = (): { state: AdminRegisterState, handlers: AdminRegisterHandlers } => {
  const searchParams = useSearchParams();
  // @ts-ignore - 保留原始代码中未直接使用的变量定义
  const _params = AdminRegister.getParams(searchParams);
  const router = useRouter();

  const [formData, setFormData] = useState<RegisterAdminInput>({
    account_user_account: '',
    account_user_email: '',
    account_user_password: ''
  });
  const [isLoading, setIsLoading] = useState(false);
  const [errorMessage, setErrorMessage] = useState<string | null>(null);
  const [showPassword, setShowPassword] = useState(false);

  const handleFormFieldChange = <K extends keyof RegisterAdminInput>(field: K, value: RegisterAdminInput[K]) => {
    setFormData(prev => ({ ...prev, [field]: value }));
    if (errorMessage) {
      setErrorMessage(null);
    }
  };

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

    try {
      await registerAdmin(formData);
      toast.success('تم إنشاء حساب المدير بنجاح');
      AdminLogin.navigateTo(router);
    } catch (error: unknown) {
      if (error instanceof Error) {
        setErrorMessage(error.message);
      } else {
        setErrorMessage('حدث خطأ غير متوقع أثناء التسجيل');
      }
    } finally {
      setIsLoading(false);
    }
  };

  const toggleShowPassword = () => setShowPassword(prev => !prev);
  const handleNavigateToLogin = () => AdminLogin.navigateTo(router);

  const state: AdminRegisterState = {
    formData,
    isLoading,
    errorMessage,
    showPassword
  };

  const handlers: AdminRegisterHandlers = {
    handleFormFieldChange,
    handleSubmit,
    toggleShowPassword,
    handleNavigateToLogin
  };

  return { state, handlers };
};