/**
 * 物流定时任务初始化组件
 * 作者: 阿瑞
 * 功能: 在客户端初始化物流查询定时任务
 * 版本: 1.0.0
 */

'use client';

import { useEffect, useState, useCallback } from 'react';
import { useNotification } from '@/components/ui/Notification';
import { useTeam } from '@/hooks';

/**
 * 物流定时任务状态接口
 */
interface CronJobStatus {
  lastRunTime: string | null;
  nextScheduledTime: string | null;
  currentStatus: 'idle' | 'running' | 'completed' | 'failed';
  runCount: number;
}

/**
 * 物流定时任务调度器组件
 * 在应用初始化时自动启动定时任务
 */
const LogisticsScheduler: React.FC = () => {
  const { currentTeam } = useTeam();
  const notification = useNotification();
  const [initialized, setInitialized] = useState(false);
  const [isLoading, setIsLoading] = useState(false);
  
  // 这些状态变量只用于调试，禁用未使用变量警告
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  const [__status, setStatus] = useState<CronJobStatus | null>(null);
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
  const [__error, setError] = useState<string | null>(null);
  
  /**
   * 初始化物流定时任务
   */
  const initializeScheduler = useCallback(async () => {
    // 检查团队信息和加载状态
    if (isLoading || !currentTeam?.team_code) return;
    
    setIsLoading(true);
    setError(null);
    
    try {
      console.log('正在初始化物流定时任务...');
      
      // 调用初始化API, 确保使用teamId参数而不是仅仅teamCode
      const response = await fetch(`/api/cron/init?teamCode=${currentTeam.team_code}&teamId=${currentTeam.team_code}&init=true&runNow=true`, {
        headers: {
          'x-team-id': currentTeam.team_code
        }
      });
      
      const data = await response.json();
      
      if (!response.ok) {
        throw new Error(data.error || '初始化失败');
      }
      
      if (data.success) {
        console.log('物流定时任务初始化成功:', data);
        setInitialized(true);
        setStatus(data.status || null);
        
        // 获取下次执行时间文本
        const nextUpdateTime = data.status?.nextScheduledTime ? 
          new Date(data.status.nextScheduledTime).toLocaleString() : 
          '未知';
        
        // 显示初始化成功通知
        notification.success(
          `系统将自动更新物流状态，下次更新时间: ${nextUpdateTime}`, 
          {
            title: '物流自动更新已启动',
            duration: 5000
          }
        );
      } else {
        const errorMsg = data.error || '未知错误';
        setError(errorMsg);
        console.error('物流定时任务初始化失败:', errorMsg);
      }
    } catch (error) {
      const errorMessage = error instanceof Error ? error.message : '初始化物流定时任务时出错';
      setError(errorMessage);
      console.error('初始化物流定时任务时出错:', error);
      
      // 显示初始化失败通知
      notification.error(
        errorMessage,
        {
          title: '物流自动更新启动失败',
          duration: 5000
        }
      );
    } finally {
      setIsLoading(false);
    }
  }, [currentTeam, isLoading, notification, setIsLoading, setInitialized, setStatus, setError]);
  
  useEffect(() => {
    if (typeof window === 'undefined' || !currentTeam?.team_code || initialized) return;
    
    // 在页面加载后延迟几秒初始化，避免与其他初始化逻辑冲突
    const timer = setTimeout(() => {
      initializeScheduler();
    }, 5000);
    
    return () => clearTimeout(timer);
  }, [currentTeam, initialized, initializeScheduler]);
  
  // 这是一个无UI组件，不渲染任何内容
  return null;
};

export default LogisticsScheduler; 