'use client';

import { useState } from 'react';
import { useRouter } from 'next/navigation';
import { useTranslation } from 'react-i18next';
import { toast } from 'sonner';
import { useAtomValue } from 'jotai';
import { selectedModelInfoAtom } from '@/lib/store';

/**
 * 数据集评估相关的自定义 Hook
 * 封装单个评估和批量评估的逻辑
 */
const useDatasetEvaluation = (projectId, onEvaluationComplete) => {
  const router = useRouter();
  const { t } = useTranslation();
  const model = useAtomValue(selectedModelInfoAtom);

  // 评估状态管理
  const [evaluatingIds, setEvaluatingIds] = useState([]);
  const [batchEvaluating, setBatchEvaluating] = useState(false);

  /**
   * 检查模型是否已配置
   */
  const checkModelConfiguration = () => {
    if (!model || !model.modelName) {
      toast.error(t('datasets.selectModelFirst', '请先选择模型'));
      return false;
    }
    return true;
  };

  /**
   * 处理单个数据集评估
   * @param {Object} dataset - 要评估的数据集对象
   */
  const handleEvaluateDataset = async dataset => {
    // 检查模型配置
    if (!checkModelConfiguration()) {
      return;
    }

    try {
      // 添加到评估中的ID列表
      setEvaluatingIds(prev => [...prev, dataset.id]);

      // 调用评估接口
      const evaluateResponse = await fetch(`/api/projects/${projectId}/datasets/${dataset.id}/evaluate`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          model,
          language: 'zh-CN'
        })
      });

      const result = await evaluateResponse.json();

      if (result.success) {
        toast.success(
          t('datasets.evaluateSuccess', '评估完成！评分：{{score}}/5', {
            score: result.data.score
          })
        );

        // 调用回调函数通知评估完成（通常用于刷新数据列表）
        if (onEvaluationComplete) {
          await onEvaluationComplete();
        }
      } else {
        toast.error(result.message || t('datasets.evaluateFailed', '评估失败'));
      }
    } catch (error) {
      console.error('评估失败:', error);
      toast.error(
        t('datasets.evaluateError', '评估失败: {{error}}', {
          error: error.message
        })
      );
    } finally {
      // 从评估中的ID列表移除
      setEvaluatingIds(prev => prev.filter(id => id !== dataset.id));
    }
  };

  /**
   * 处理批量评估
   */
  const handleBatchEvaluate = async () => {
    // 检查模型配置
    if (!checkModelConfiguration()) {
      return;
    }

    try {
      setBatchEvaluating(true);

      // 调用批量评估接口
      const response = await fetch(`/api/projects/${projectId}/datasets/batch-evaluate`, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          model,
          language: 'zh-CN'
        })
      });

      const result = await response.json();

      if (result.success) {
        toast.success(t('datasets.batchEvaluateStarted', '批量评估任务已启动，将在后台进行处理'));
        // 跳转到任务页面查看进度
        router.push(`/projects/${projectId}/tasks`);
      } else {
        toast.error(result.message || t('datasets.batchEvaluateStartFailed', '启动批量评估失败'));
      }
    } catch (error) {
      console.error('批量评估失败:', error);
      toast.error(
        t('datasets.batchEvaluateFailed', '批量评估失败: {{error}}', {
          error: error.message
        })
      );
    } finally {
      setBatchEvaluating(false);
    }
  };

  /**
   * 检查指定数据集是否正在评估中
   * @param {string} datasetId - 数据集ID
   * @returns {boolean} 是否正在评估中
   */
  const isEvaluating = datasetId => {
    return evaluatingIds.includes(datasetId);
  };

  /**
   * 获取当前正在评估的数据集数量
   * @returns {number} 正在评估的数据集数量
   */
  const getEvaluatingCount = () => {
    return evaluatingIds.length;
  };

  return {
    // 状态
    evaluatingIds,
    batchEvaluating,

    // 方法
    handleEvaluateDataset,
    handleBatchEvaluate,

    // 工具方法
    isEvaluating,
    getEvaluatingCount,

    // 模型信息（便于组件使用）
    model
  };
};

export default useDatasetEvaluation;
