'use client'
import { useState, useEffect, useCallback, useMemo } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { MonthlyAnalytics, ReportExport } from '@/backend/route-params';
import type {
  GetMonthlyAnalyticsOutput,
} from '@/backend/actions/MonthlyAnalytics';
import { getMonthlyAnalytics } from '@/backend/actions/MonthlyAnalytics';
import { toast } from "sonner";

interface FilterForm {
  startDate: string;
  endDate: string;
}

export interface MonthlyAnalyticsState {
  /** 是否正在加载数据 */
  isLoading: boolean;
  /** 后端返回的分析数据详情（含总金额汇总） */
  analyticsData: GetMonthlyAnalyticsOutput | null;
  /** 筛选表单数据 */
  filterForm: FilterForm;
}

export interface MonthlyAnalyticsHandlers {
  /** 处理筛选表单字段变化 */
  handleFilterChange: <K extends keyof FilterForm>(key: K, value: FilterForm[K]) => void;
  /** 应用筛选条件并更新 URL */
  handleApplyFilters: () => void;
  /** 点击导出按钮跳转到报告导出页面 */
  handleExportClick: () => void;
}

export const useMonthlyAnalytics = (): { state: MonthlyAnalyticsState, handlers: MonthlyAnalyticsHandlers } => {
  const router = useRouter();
  const searchParams = useSearchParams();

  // ===== 页面入参 =====
  const params = useMemo(() => MonthlyAnalytics.getParams(searchParams), [searchParams]);

  // ===== State =====
  const [isLoading, setIsLoading] = useState<boolean>(true);
  const [analyticsData, setAnalyticsData] = useState<GetMonthlyAnalyticsOutput | null>(null);
  
  const [filterForm, setFilterForm] = useState<FilterForm>({
    startDate: params.startDate,
    endDate: params.endDate,
  });

  // ===== Effects =====
  // 监听 URL 参数变化，发起后端请求
  useEffect(() => {
    let isMounted = true;

    const fetchAnalytics = async () => {
      setIsLoading(true);
      try {
        const data = await getMonthlyAnalytics({
          startDate: params.startDate,
          endDate: params.endDate
        });
        if (isMounted) {
          setAnalyticsData(data);
        }
      } catch (error: any) {
        if (isMounted) {
          toast.error(error.message || 'حدث خطأ أثناء جلب البيانات');
        }
      } finally {
        if (isMounted) {
          setIsLoading(false);
        }
      }
    };

    fetchAnalytics();

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

  // 同步 URL 参数到本地表单
  useEffect(() => {
    setFilterForm({
      startDate: params.startDate,
      endDate: params.endDate,
    });
  }, [params]);

  // ===== Handlers =====
  const handleFilterChange = useCallback(<K extends keyof FilterForm>(key: K, value: FilterForm[K]) => {
    setFilterForm(prev => ({ ...prev, [key]: value }));
  }, []);

  const handleApplyFilters = useCallback(() => {
    MonthlyAnalytics.navigateToWithDateRange(router, {
      startDate: filterForm.startDate,
      endDate: filterForm.endDate
    });
  }, [router, filterForm]);

  const handleExportClick = useCallback(() => {
    ReportExport.navigateToDefault(router);
  }, [router]);

  return {
    state: {
      isLoading,
      analyticsData,
      filterForm,
    },
    handlers: {
      handleFilterChange,
      handleApplyFilters,
      handleExportClick,
    }
  };
};