'use client'
import { useState, useEffect, useCallback, useMemo } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { 
  OrderManagement, 
  OrderDetail, 
  OrderEdit, 
  MonthlyAnalytics, 
  ReportExport 
} from '@/backend/route-params';
import type { 
  OrderStatus, 
  OrderSummary, 
  OrderListItem as OrderListItemFromAction, 
  GetOrderListInput, 
  GetFilterOptionsOutput 
} from '@/backend/actions/OrderManagement';
import { 
  getOrderList, 
  deleteOrder, 
  getFilterOptions 
} from '@/backend/actions/OrderManagement';
import { toast } from "sonner";

// Inner Function（不导出的内部辅助函数）
const STATUS_LABELS: Record<OrderStatus, string> = {
  PENDING: 'قيد الانتظار',
  IN_PROGRESS: 'قيد التوصيل',
  DELIVERED: 'تم التوصيل',
  CANCELLED: 'ملغى',
};

type OrderListItem = OrderListItemFromAction & {
  total_amount: number;
};

export interface OrderManagementState {
  /** 订单列表数据 */
  list: OrderListItem[];
  /** 总条数 */
  total: number;
  /** 订单统计摘要 */
  summary: OrderSummary | null;
  /** 过滤器选项数据 */
  filterOptions: GetFilterOptionsOutput;
  /** 加载状态 */
  isLoading: boolean;
  /** 删除确认弹窗显隐 */
  deleteModalOpen: boolean;
  /** 当前待删除的订单对象 */
  orderToDelete: OrderListItem | null;
  /** 筛选表单数据 */
  filterForm: {
    keyword: string;
    governorateName: string;
    driverName: string;
    orderType: string;
    status: string;
    startDate: string;
    endDate: string;
    page: number;
    pageSize: number;
  };
  /** 总页数 */
  totalPages: number;
  /** 状态标签映射 */
  statusLabels: Record<OrderStatus, string>;
}

export interface OrderManagementHandlers {
  /** 刷新数据 */
  fetchData: () => Promise<void>;
  /** 处理表单字段变更 */
  handleFormFieldChange: (field: keyof OrderManagementState['filterForm'], value: any) => void;
  /** 执行关键词搜索 */
  handleApplySearch: () => void;
  /** 执行多重筛选 */
  handleApplyFilters: () => void;
  /** 重置所有筛选条件 */
  handleResetFilters: () => void;
  /** 点击仪表盘状态卡片筛选 */
  handleKPIStatusClick: (status: OrderStatus) => void;
  /** 确认删除订单 */
  handleDeleteConfirm: () => Promise<void>;
  /** 处理分页切换 */
  handlePageChange: (newPage: number) => void;
  /** 设置删除弹窗状态 */
  setDeleteModalOpen: (open: boolean) => void;
  /** 设置待删除订单 */
  setOrderToDelete: (order: OrderListItem | null) => void;
  /** 跳转至月度分析 */
  navigateToAnalytics: (mode: 'default' | 'date') => void;
  /** 跳转至报告导出 */
  navigateToExport: (mode: 'default' | 'orders' | 'date') => void;
  /** 跳转至详情页 */
  navigateToDetail: (orderId: string) => void;
  /** 跳转至编辑页 */
  navigateToEdit: (orderId: string) => void;
}

export const useOrderManagement = (): { state: OrderManagementState, handlers: OrderManagementHandlers } => {
  const router = useRouter();
  const searchParams = useSearchParams();
  const params = OrderManagement.getParams(searchParams);

  const [list, setList] = useState<OrderListItem[]>([]);
  const [total, setTotal] = useState<number>(0);
  const [summary, setSummary] = useState<OrderSummary | null>(null);
  const [filterOptions, setFilterOptions] = useState<GetFilterOptionsOutput>({
    governorates: [],
    drivers: [],
    order_types: []
  });
  const [isLoading, setIsLoading] = useState<boolean>(true);
  const [deleteModalOpen, setDeleteModalOpen] = useState<boolean>(false);
  const [orderToDelete, setOrderToDelete] = useState<OrderListItem | null>(null);

  const [filterForm, setFilterForm] = useState({
    keyword: params.keyword || '',
    governorateName: params.governorateName || '',
    driverName: params.driverName || '',
    orderType: params.orderType || '',
    status: params.status || '',
    startDate: '',
    endDate: '',
    page: params.page ? parseInt(params.page, 10) : 1,
    pageSize: 20
  });

  const fetchData = useCallback(async () => {
    setIsLoading(true);
    try {
      const input: GetOrderListInput = {
        keyword: params.keyword || undefined,
        governorateName: params.governorateName || undefined,
        driverName: params.driverName || undefined,
        orderType: params.orderType || undefined,
        status: (params.status as OrderStatus) || undefined,
        startDate: filterForm.startDate || undefined,
        endDate: filterForm.endDate || undefined,
        page: params.page ? parseInt(params.page, 10) : 1,
        page_size: filterForm.pageSize
      };
      const data = await getOrderList(input);
      setList(data.list);
      setTotal(data.total);
      setSummary(data.summary);
    } catch (error: any) {
      toast.error(error.message || 'حدث خطأ أثناء جلب البيانات');
    } finally {
      setIsLoading(false);
    }
  }, [params, filterForm.startDate, filterForm.endDate, filterForm.pageSize]);

  useEffect(() => {
    let isMounted = true;
    getFilterOptions({}).then(data => {
      if (isMounted) setFilterOptions(data);
    }).catch(err => {
      toast.error(err.message || 'حدث خطأ أثناء تحميل الخيارات');
    });
    return () => { isMounted = false };
  }, []);

  useEffect(() => {
    setFilterForm(prev => ({
      ...prev,
      keyword: params.keyword || '',
      governorateName: params.governorateName || '',
      driverName: params.driverName || '',
      orderType: params.orderType || '',
      status: params.status || '',
      page: params.page ? parseInt(params.page, 10) : 1,
    }));
    fetchData();
  }, [params, fetchData]);

  const handleFormFieldChange = (field: keyof typeof filterForm, value: any) => {
    setFilterForm(prev => ({ ...prev, [field]: value }));
  };

  const handleApplySearch = () => {
    OrderManagement.navigateToWithSearch(router, { keyword: filterForm.keyword, page: '1' });
  };

  const handleApplyFilters = () => {
    OrderManagement.navigateToWithFilters(router, { 
      governorateName: filterForm.governorateName, 
      driverName: filterForm.driverName, 
      status: filterForm.status 
    });
  };

  const handleResetFilters = () => {
    handleFormFieldChange('keyword', '');
    handleFormFieldChange('governorateName', '');
    handleFormFieldChange('driverName', '');
    handleFormFieldChange('orderType', '');
    handleFormFieldChange('status', '');
    handleFormFieldChange('startDate', '');
    handleFormFieldChange('endDate', '');
    OrderManagement.navigateToDefault(router);
  };

  const handleKPIStatusClick = (status: OrderStatus) => {
    OrderManagement.navigateToWithStatus(router, { status });
  };

  const handleDeleteConfirm = async () => {
    if (!orderToDelete) return;
    try {
      await deleteOrder({ order_id: orderToDelete.order_id });
      toast.success('تم حذف الطلب بنجاح');
      setDeleteModalOpen(false);
      setOrderToDelete(null);
      fetchData();
    } catch (error: any) {
      toast.error(error.message || 'فشل حذف الطلب');
    }
  };

  const handlePageChange = (newPage: number) => {
    OrderManagement.navigateToWithSearch(router, { 
      keyword: filterForm.keyword, 
      page: newPage.toString() 
    });
  };

  const totalPages = useMemo(() => Math.max(1, Math.ceil(total / filterForm.pageSize)), [total, filterForm.pageSize]);

  const navigateToAnalytics = (mode: 'default' | 'date') => {
    if (mode === 'default') {
      MonthlyAnalytics.navigateToDefault(router);
    } else {
      MonthlyAnalytics.navigateToWithDateRange(router, { 
        startDate: filterForm.startDate || '2024-01-01', 
        endDate: filterForm.endDate || '2024-12-31' 
      });
    }
  };

  const navigateToExport = (mode: 'default' | 'orders' | 'date') => {
    if (mode === 'default') {
      ReportExport.navigateToDefault(router);
    } else if (mode === 'orders') {
      ReportExport.navigateToWithType(router, { reportType: 'ORDERS' });
    } else {
      ReportExport.navigateToWithDateRange(router, { 
        startDate: filterForm.startDate || '2024-01-01', 
        endDate: filterForm.endDate || '2024-12-31' 
      });
    }
  };

  const navigateToDetail = (orderId: string) => OrderDetail.navigateToDetail(router, { orderId });
  const navigateToEdit = (id: string) => OrderEdit.navigateToEdit(router, { id });

  const state: OrderManagementState = {
    list,
    total,
    summary,
    filterOptions,
    isLoading,
    deleteModalOpen,
    orderToDelete,
    filterForm,
    totalPages,
    statusLabels: STATUS_LABELS
  };

  const handlers: OrderManagementHandlers = {
    fetchData,
    handleFormFieldChange,
    handleApplySearch,
    handleApplyFilters,
    handleResetFilters,
    handleKPIStatusClick,
    handleDeleteConfirm,
    handlePageChange,
    setDeleteModalOpen,
    setOrderToDelete,
    navigateToAnalytics,
    navigateToExport,
    navigateToDetail,
    navigateToEdit
  };

  return { state, handlers };
};