// branch_PlanOutline 接口的 Mock 数据和 Mock API
// 模拟后端返回的原始数据格式（IRawPlanResponse）

import type { IRawPlanResponse, IRawStepTask } from '@/stores'

// 后端返回的数据格式
export type BranchPlanOutlineResponse = IRawPlanResponse

// Mock 数据：模拟后端返回的原始分支数据（不含 Collaboration_Brief_FrontEnd）
// 注意：这里模拟的是 branch_PlanOutline 函数返回的数据，不是前端转换后的数据
const mockBranchDataRaw: IRawStepTask[][] = [
  // 第一个分支方案
  [
    {
      StepName: '分析用户需求',
      TaskContent: '分析用户需求，制定项目开发计划',
      InputObject_List: ['腐蚀类型及成因列表'],
      OutputObject: '项目开发计划书',
      AgentSelection: ['腐蚀机理研究员', '实验材料学家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
    {
      StepName: '系统设计与架构',
      TaskContent: '设计系统架构和数据库结构',
      InputObject_List: ['项目开发计划书'],
      OutputObject: '系统设计文档',
      AgentSelection: ['腐蚀机理研究员', '防护工程专家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
  ],
  // 第二个分支方案（快速原型方案）
  [
    {
      StepName: '需求快速原型',
      TaskContent: '构建快速原型验证核心功能',
      InputObject_List: ['腐蚀类型及成因列表'],
      OutputObject: '原型系统',
      AgentSelection: ['实验材料学家', '防护工程专家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
    {
      StepName: '原型测试与优化',
      TaskContent: '测试原型并根据反馈快速迭代',
      InputObject_List: ['原型系统'],
      OutputObject: '优化后的原型',
      AgentSelection: ['腐蚀机理研究员', '实验材料学家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
  ],
  // 第三个分支方案（质量优先方案）
  [
    {
      StepName: '需求深度分析',
      TaskContent: '深入分析用户需求和技术可行性',
      InputObject_List: ['腐蚀类型及成因列表'],
      OutputObject: '详细需求分析报告',
      AgentSelection: ['腐蚀机理研究员', '防护工程专家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
    {
      StepName: '质量保障设计',
      TaskContent: '设计质量保障体系和测试方案',
      InputObject_List: ['详细需求分析报告'],
      OutputObject: '质量保障方案',
      AgentSelection: ['实验材料学家', '防护工程专家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
    {
      StepName: '系统开发与测试',
      TaskContent: '按质量标准进行系统开发和测试',
      InputObject_List: ['质量保障方案'],
      OutputObject: '经过完整测试的系统',
      AgentSelection: ['腐蚀机理研究员', '实验材料学家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
  ],
  // 第四个分支方案（敏捷开发方案）
  [
    {
      StepName: '迭代规划',
      TaskContent: '制定敏捷开发迭代计划',
      InputObject_List: ['腐蚀类型及成因列表'],
      OutputObject: '迭代计划',
      AgentSelection: ['防护工程专家', '腐蚀机理研究员'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
    {
      StepName: '快速开发与验证',
      TaskContent: '快速开发并持续验证功能',
      InputObject_List: ['迭代计划'],
      OutputObject: '可运行的功能模块',
      AgentSelection: ['实验材料学家', '防护工程专家'],
      Collaboration_Brief_frontEnd: {
        template: '',
        data: {},
      },
      TaskProcess: [],
    },
  ],
]

/**
 * 模拟后端的 Add_Collaboration_Brief_FrontEnd 函数
 * 为每个任务添加前端协作简报（Collaboration_Brief_frontEnd）
 */
function Add_Collaboration_Brief_FrontEnd(branchList: IRawStepTask[][]): IRawStepTask[][] {
  return branchList.map((tasks) =>
    tasks.map((task) => ({
      ...task,
      Collaboration_Brief_frontEnd: generateCollaborationBrief(task),
    })),
  )
}

/**
 * 生成协作简报（Collaboration_Brief_frontEnd）
 * 根据 StepName、TaskContent、AgentSelection 生成模板和数据
 */
function generateCollaborationBrief(task: IRawStepTask): {
  template: string
  data: Record<string, any>
} {
  const agents = task.AgentSelection || []
  const stepName = task.StepName || ''

  // 为每个 agent 生成颜色
  const colors = [
    'hsl(210, 70%, 50%)',
    'hsl(30, 70%, 50%)',
    'hsl(120, 70%, 50%)',
    'hsl(270, 70%, 50%)',
  ]

  // 生成 data 对象
  const data: Record<string, any> = {}
  agents.forEach((agent, index) => {
    data[agent] = {
      text: agent,
      style: { background: colors[index % colors.length] },
    }
  })

  // 生成 template（简化版本，实际应根据任务内容生成）
  const template =
    agents.length > 0
      ? agents.map((agent, i) => `!<${agent}>!负责!<${stepName}-${i}>!`).join('，')
      : ''

  return {
    template,
    data,
  }
}

/**
 * Mock API：模拟后端 branch_PlanOutline 接口调用
 *
 * @param branch_Number - 分支数量
 * @param Modification_Requirement - 修改需求
 * @param Existing_Steps - 现有步骤名称列表
 * @param Baseline_Completion - 基线完成度
 * @param InitialObject_List - 初始对象列表
 * @param General_Goal - 总体目标
 * @returns Promise<IRawPlanResponse> - 返回包含 'Collaboration Process' 的响应
 */
export const mockBranchPlanOutlineAPI = async (params: {
  branch_Number: number
  Modification_Requirement: string
  Existing_Steps: string[]
  Baseline_Completion: number
  InitialObject_List: string[]
  General_Goal: string
}): Promise<IRawPlanResponse> => {
  // 模拟网络延迟 800ms
  await new Promise((resolve) => setTimeout(resolve, 800))

  console.log('[Mock API] branch_PlanOutline 调用参数:', params)

  // 🆕 使用轮询方式选择分支方案（依次循环使用所有分支方案）
  const totalBranches = mockBranchDataRaw.length
  const sessionKey = `branch-plan-outline-index-${params.General_Goal || 'default'}`

  // 获取上一次的选择索引
  let lastIndex = parseInt(sessionStorage.getItem(sessionKey) || '0')

  // 计算本次的选择索引（轮询到下一个分支）
  const selectedBranchIndex = (lastIndex + 1) % totalBranches

  // 保存本次的选择索引
  sessionStorage.setItem(sessionKey, selectedBranchIndex.toString())

  const rawBranchData = mockBranchDataRaw[selectedBranchIndex]

  console.log(
    '[Mock API] branch_PlanOutline 选择分支方案:',
    selectedBranchIndex + 1,
    '/',
    totalBranches,
  )

  // 模拟后端处理：添加 Collaboration_Brief_FrontEnd
  const processedBranches = Add_Collaboration_Brief_FrontEnd([rawBranchData])

  // 构造响应数据（符合后端返回格式）
  const response: IRawPlanResponse = {
    'Collaboration Process': processedBranches[0] || [],
  }

  console.log('[Mock API] branch_PlanOutline 返回数据:', response)

  return response
}

export default mockBranchPlanOutlineAPI
