// 模拟后端原始返回格式的 Mock 数据 - fill_stepTask_TaskProcess 接口
// 后端返回格式: IRawStepTask { StepName, TaskContent, InputObject_List, OutputObject, AgentSelection, TaskProcess, Collaboration_Brief_frontEnd }

import type { IRawStepTask } from '@/stores'

// TaskProcess 项格式
interface RawTaskProcessItem {
  ID: string
  ActionType: string
  AgentName: string
  Description: string
  ImportantInput: string[]
}

// Collaboration_Brief_frontEnd 数据项格式
interface RawBriefDataItem {
  text: string
  color: number[] // [h, s, l]
}

// 后端返回的完整数据格式
export interface RawAgentTaskProcessResponse {
  StepName: string
  TaskContent: string
  InputObject_List: string[]
  OutputObject: string
  AgentSelection: string[]
  TaskProcess: RawTaskProcessItem[]
  Collaboration_Brief_frontEnd?: {
    template: string
    data: Record<string, RawBriefDataItem>
  }
}

// 模拟后端返回的原始数据结构（与后端缓存数据格式一致）
// 使用与 AgentAssignmentBackendMock 相同的 agent 列表
export const mockBackendAgentTaskProcessData: RawAgentTaskProcessResponse = {
  StepName: '腐蚀类型识别',
  TaskContent: '分析船舶制造中常见的材料腐蚀类型及其成因。',
  InputObject_List: [],
  OutputObject: '腐蚀类型及成因列表',
  AgentSelection: ['腐蚀机理研究员', '实验材料学家', '防护工程专家'],
  TaskProcess: [
    {
      ID: 'action_101',
      ActionType: 'Propose',
      AgentName: '腐蚀机理研究员',
      Description: '分析海洋环境下的腐蚀机理，确定关键防护要素',
      ImportantInput: ['海洋环境参数', '防护性能指标'],
    },
    {
      ID: 'action_102',
      ActionType: 'Critique',
      AgentName: '实验材料学家',
      Description: '基于腐蚀机理分析结果，设计涂层材料的基础配方',
      ImportantInput: ['腐蚀机理分析结果', '涂层材料配方'],
    },
    {
      ID: 'action_103',
      ActionType: 'Improve',
      AgentName: '防护工程专家',
      Description: '筛选适用于防护涂层的二维材料，评估其性能潜力',
      ImportantInput: ['材料配方设计', '涂层材料配方'],
    },
    {
      ID: 'action_104',
      ActionType: 'Finalize',
      AgentName: '实验材料学家',
      Description: '制定涂层材料性能测试实验方案，包括测试指标和方法',
      ImportantInput: ['二维材料筛选结果', '防护性能指标'],
    },
    {
      ID: 'action_105',
      ActionType: 'Critique',
      AgentName: '防护工程专家',
      Description: '模拟海洋流体环境对涂层材料的影响，优化涂层结构',
      ImportantInput: ['实验方案', '海洋环境参数'],
    },
    {
      ID: 'action_106',
      ActionType: 'Improve',
      AgentName: '腐蚀机理研究员',
      Description: '综合评估涂层材料的防护性能，提出改进建议',
      ImportantInput: ['流体力学模拟结果', '实验材料学测试结果', '二维材料性能数据'],
    },
    {
      ID: 'action_107',
      ActionType: 'Improve',
      AgentName: '实验材料学家',
      Description: '整理研发数据和测试结果，撰写完整的研发报告',
      ImportantInput: ['综合性能评估', '所有研发数据'],
    },
  ],
  Collaboration_Brief_frontEnd: {
    template: '基于!<0>!、!<1>!和!<2>!，!<3>!、!<4>!、!<5>!和!<6>!执行!<7>!任务，以获得!<8>!。',
    data: {
      '0': {
        text: '涂层材料配方',
        color: [120, 60, 70], // hsl(120, 60%, 70%)
      },
      '1': {
        text: '海洋环境参数',
        color: [120, 60, 70], // hsl(120, 60%, 70%)
      },
      '2': {
        text: '防护性能指标',
        color: [120, 60, 70], // hsl(120, 60%, 70%)
      },
      '3': {
        text: '腐蚀机理研究员',
        color: [0, 0, 90], // hsl(0, 0%, 90%)
      },
      '4': {
        text: '先进材料研发员',
        color: [0, 0, 90], // hsl(0, 0%, 90%)
      },
      '5': {
        text: '二维材料科学家',
        color: [0, 0, 90], // hsl(0, 0%, 90%)
      },
      '6': {
        text: '实验材料学家',
        color: [0, 0, 90], // hsl(0, 0%, 90%)
      },
      '7': {
        text: '研发适用于海洋环境的耐腐蚀防护涂层材料，并进行性能测试与评估',
        color: [0, 0, 87], // hsl(0, 0%, 87%)
      },
      '8': {
        text: '防护涂层材料研发报告',
        color: [30, 100, 80], // hsl(30, 100%, 80%)
      },
    },
  },
}

// 模拟后端API调用 - fill_stepTask_TaskProcess
export const mockBackendFillAgentTaskProcess = async (
  goal: string,
  stepTask: any,
  agents: string[],
): Promise<RawAgentTaskProcessResponse> => {
  // 模拟网络延迟 500ms
  await new Promise((resolve) => setTimeout(resolve, 500))

  // 在真实场景中，后端会根据传入的 goal、stepTask 和 agents 生成不同的 TaskProcess
  // 这里我们直接返回预设的 Mock 数据
  // 可以根据传入的 agents 动态修改 AgentSelection 和 TaskProcess

  // 确保 agents 数组不为空
  const safeAgents = agents.length > 0 ? agents : ['腐蚀机理研究员']

  const responseData: RawAgentTaskProcessResponse = {
    ...mockBackendAgentTaskProcessData,
    AgentSelection: agents,
    TaskProcess: mockBackendAgentTaskProcessData.TaskProcess.map((action, index) => ({
      ...action,
      AgentName: safeAgents[index % safeAgents.length],
    })),
    Collaboration_Brief_frontEnd: mockBackendAgentTaskProcessData.Collaboration_Brief_frontEnd
      ? {
          template: mockBackendAgentTaskProcessData.Collaboration_Brief_frontEnd.template,
          data: { ...mockBackendAgentTaskProcessData.Collaboration_Brief_frontEnd.data },
        }
      : undefined,
  }

  // 更新 Collaboration_Brief_frontEnd.data 中的 agent 引用
  if (responseData.Collaboration_Brief_frontEnd?.data) {
    const agentCount = Math.min(safeAgents.length, 4) // 最多4个agent
    for (let i = 0; i < agentCount; i++) {
      const key = String(i + 3) // agent从索引3开始
      if (responseData.Collaboration_Brief_frontEnd.data[key]) {
        responseData.Collaboration_Brief_frontEnd.data[key] = {
          ...responseData.Collaboration_Brief_frontEnd.data[key],
          text: safeAgents[i]!,
        }
      }
    }
  }

  return responseData
}
