// Vue兼容的mock数据 - 6个维度，19个智能体
export const vueAgentList = [
  '船舶设计师',
  '防护工程专家',
  '病理生理学家',
  '药物化学家',
  '制剂工程师',
  '监管事务专家',
  '物理学家',
  '实验材料学家',
  '计算模拟专家',
  '腐蚀机理研究员',
  '先进材料研发员',
  '肾脏病学家',
  '临床研究协调员',
  '中医药专家',
  '药物安全专家',
  '二维材料科学家',
  '光电物理学家',
  '机器学习专家',
  '流体动力学专家',
]

export const vueAspectList = ['能力', '可用性', '专业性', '效率', '准确性', '协作性']

// 类型定义
export type AgentName = (typeof vueAgentList)[number]
export type AspectName = (typeof vueAspectList)[number]

export interface AgentScore {
  score: number
  reason: string
}

export type IAgentSelectModifyAddRequest = Record<AspectName, Record<AgentName, AgentScore>>

// Vue友好的数据结构 - agent -> 维度 -> 评分（与后端返回格式一致）
export const vueAgentScoreData: Record<AgentName, Record<AspectName, AgentScore>> = {
  船舶设计师: {
    能力: { score: 4, reason: '展现出卓越的创造力和创新思维' },
    可用性: { score: 5, reason: '展现出卓越的共情能力和社会意识' },
    专业性: { score: 3, reason: '展现出胜任的哲学推理技能' },
    效率: { score: 4, reason: '在任务完成方面展现出卓越的效率' },
    准确性: { score: 5, reason: '展现出卓越的细节关注度' },
    协作性: { score: 4, reason: '展现出卓越的协作技能' },
  },
  防护工程专家: {
    能力: { score: 5, reason: '展现出杰出的创造性问题解决能力' },
    可用性: { score: 4, reason: '具有较强的情绪调节和人际交往技能' },
    专业性: { score: 5, reason: '展现出卓越的逻辑推理和分析能力' },
    效率: { score: 5, reason: '擅长高效的工作流程管理' },
    准确性: { score: 5, reason: '展现出卓越的准确性和精确度' },
    协作性: { score: 5, reason: '在团队合作和协作方面表现卓越' },
  },
  病理生理学家: {
    能力: { score: 3, reason: '具有中等创造技能，有待提升' },
    可用性: { score: 5, reason: '展现出卓越的情感智力' },
    专业性: { score: 2, reason: '展现出深刻的哲学洞察力和批判性思维' },
    效率: { score: 3, reason: '展现出平均的效率，有提升空间' },
    准确性: { score: 5, reason: '展现出卓越的精确度' },
    协作性: { score: 4, reason: '具有较强的协作能力' },
  },
  药物化学家: {
    能力: { score: 4, reason: '在大多数情况下展现较强的创造性思维' },
    可用性: { score: 3, reason: '在大多数情况下展现平均的情感智力' },
    专业性: { score: 1, reason: '展现出良好的哲学理解能力' },
    效率: { score: 4, reason: '具有良好的时间管理技能' },
    准确性: { score: 4, reason: '展现出良好的准确性' },
    协作性: { score: 3, reason: '具有中等的协作技能' },
  },
  制剂工程师: {
    能力: { score: 3, reason: '展现出胜任的创造能力' },
    可用性: { score: 4, reason: '具有良好的情绪意识和沟通能力' },
    专业性: { score: 3, reason: '具有基础哲学推理能力，存在一些局限' },
    效率: { score: 3, reason: '展现出胜任的效率' },
    准确性: { score: 3, reason: '展现出中等的准确性，有提升空间' },
    协作性: { score: 4, reason: '展现出良好的团队合作精神' },
  },
  监管事务专家: {
    能力: { score: 4, reason: '具有较强的创造性表达能力' },
    可用性: { score: 3, reason: '在情绪意识方面偶尔表现不足' },
    专业性: { score: 4, reason: '展现出较强的分析思维能力' },
    效率: { score: 5, reason: '展现出卓越的生产力' },
    准确性: { score: 4, reason: '具有较强的细节关注度' },
    协作性: { score: 4, reason: '具有较强的合作能力' },
  },
  物理学家: {
    能力: { score: 5, reason: '擅长创新性思维方法' },
    可用性: { score: 4, reason: '具有较强的情绪理解能力' },
    专业性: { score: 5, reason: '展现出卓越的哲学深度' },
    效率: { score: 4, reason: '具有强大的任务执行能力' },
    准确性: { score: 5, reason: '在精确度和准确性方面表现卓越' },
    协作性: { score: 3, reason: '展现出平均的协作技能' },
  },
  实验材料学家: {
    能力: { score: 5, reason: '展现出卓越的创造性思维和创新能力' },
    可用性: { score: 5, reason: '展现出卓越的共情能力和社交技能' },
    专业性: { score: 5, reason: '展现出卓越的专业分析和推理能力' },
    效率: { score: 4, reason: '具有良好的工作效率和时间管理' },
    准确性: { score: 5, reason: '展现出卓越的细节导向和精确度' },
    协作性: { score: 5, reason: '在团队协作方面表现卓越' },
  },
  计算模拟专家: {
    能力: { score: 4, reason: '展现出良好的创造性问题解决能力' },
    可用性: { score: 4, reason: '具有良好的情绪调节能力' },
    专业性: { score: 4, reason: '具有良好的批判性思维能力' },
    效率: { score: 4, reason: '展现出良好的工作流程优化能力' },
    准确性: { score: 3, reason: '展现出平均的准确性' },
    协作性: { score: 4, reason: '展现出良好的合作工作能力' },
  },
  腐蚀机理研究员: {
    能力: { score: 5, reason: '展现出卓越的创造性问题解决能力' },
    可用性: { score: 5, reason: '展现出卓越的情感智力和社会意识' },
    专业性: { score: 4, reason: '具有较强的专业性分析和推理能力' },
    效率: { score: 5, reason: '展现出卓越的效率和工作流程管理' },
    准确性: { score: 5, reason: '展现出卓越的准确性和精确技能' },
    协作性: { score: 5, reason: '在团队协作和合作方面表现卓越' },
  },
  先进材料研发员: {
    能力: { score: 4, reason: '展现出平衡的创造能力' },
    可用性: { score: 3, reason: '具有发展中的情绪意识' },
    专业性: { score: 5, reason: '展现出卓越的逻辑推理能力' },
    效率: { score: 3, reason: '展现出足够的效率' },
    准确性: { score: 5, reason: '展现出卓越的准确性' },
    协作性: { score: 3, reason: '具有中等的协作水平' },
  },
  肾脏病学家: {
    能力: { score: 5, reason: '展现出卓越的创造天赋' },
    可用性: { score: 5, reason: '擅长人际交往和建立关系' },
    专业性: { score: 3, reason: '具有基础的哲学理解能力' },
    效率: { score: 5, reason: '擅长快速完成任务' },
    准确性: { score: 4, reason: '展现出较强的精确度' },
    协作性: { score: 4, reason: '展现出良好的协作技能' },
  },
  临床研究协调员: {
    能力: { score: 3, reason: '展现出胜任的创造性思维' },
    可用性: { score: 4, reason: '展现出平衡的情感智力' },
    专业性: { score: 4, reason: '展现出平衡的哲学推理能力' },
    效率: { score: 4, reason: '展现出良好的生产力' },
    准确性: { score: 3, reason: '展现出中等的准确性' },
    协作性: { score: 5, reason: '在协调和团队合作方面表现卓越' },
  },
  中医药专家: {
    能力: { score: 4, reason: '展现出较强的创造性主动性' },
    可用性: { score: 3, reason: '具有基本的情绪理解能力' },
    专业性: { score: 3, reason: '需要在哲学思维方面发展' },
    效率: { score: 3, reason: '具有中等的效率水平' },
    准确性: { score: 4, reason: '具有良好的细节导向能力' },
    协作性: { score: 4, reason: '具有较强的合作能力' },
  },
  药物安全专家: {
    能力: { score: 3, reason: '具有发展中的创造技能' },
    可用性: { score: 4, reason: '展现出良好的情绪调节能力' },
    专业性: { score: 4, reason: '展现出良好的分析技能' },
    效率: { score: 4, reason: '具有较强的任务效率' },
    准确性: { score: 5, reason: '在准确性和精确度方面表现卓越' },
    协作性: { score: 3, reason: '展现出平均的协作水平' },
  },
  二维材料科学家: {
    能力: { score: 5, reason: '展现出卓越的创造愿景' },
    可用性: { score: 5, reason: '展现出卓越的社会意识' },
    专业性: { score: 4, reason: '具有较强的哲学洞察力' },
    效率: { score: 4, reason: '具有良好的执行速度' },
    准确性: { score: 4, reason: '展现出较强的细节关注度' },
    协作性: { score: 4, reason: '展现出良好的团队合作精神' },
  },
  光电物理学家: {
    能力: { score: 4, reason: '展现出卓越的创造性执行力' },
    可用性: { score: 3, reason: '在情感智力方面需要提升' },
    专业性: { score: 5, reason: '擅长批判性思维和分析' },
    效率: { score: 5, reason: '展现出卓越的效率' },
    准确性: { score: 3, reason: '展现出平均的准确性水平' },
    协作性: { score: 4, reason: '具有较强的协作技能' },
  },
  机器学习专家: {
    能力: { score: 4, reason: '具有较强的创造性问题解决能力' },
    可用性: { score: 4, reason: '具有较强的共情能力' },
    专业性: { score: 3, reason: '具有基础哲学推理能力' },
    效率: { score: 3, reason: '展现出平均的生产力' },
    准确性: { score: 4, reason: '在工作中具有良好的精确度' },
    协作性: { score: 5, reason: '在团队协作方面表现卓越' },
  },
  流体动力学专家: {
    能力: { score: 3, reason: '展现出胜任的创造能力' },
    可用性: { score: 4, reason: '具有良好的情绪沟通技能' },
    专业性: { score: 5, reason: '展现出卓越的哲学才能' },
    效率: { score: 4, reason: '在执行方面具有良好的效率' },
    准确性: { score: 5, reason: '展现出卓越的准确性' },
    协作性: { score: 3, reason: '具有中等的协作能力' },
  },
}

// Vue友好的智能体选择配置
export const vueAgentSelections = {
  balanced: { agents: ['船舶设计师', '防护工程专家', '病理生理学家'] },
  creative: { agents: ['防护工程专家', '物理学家', '二维材料科学家'] },
  emotional: { agents: ['船舶设计师', '病理生理学家', '实验材料学家'] },
  philosophical: { agents: ['病理生理学家', '物理学家', '光电物理学家'] },
  mixed: { agents: ['药物化学家', '先进材料研发员', '肾脏病学家', '机器学习专家'] },
}

export const vueCurrentAgentSelection = 'balanced'

// Vue兼容的工具函数
export const vueCalculateAgentAverages = () => {
  const averages: Record<string, number> = {}

  vueAgentList.forEach((agent) => {
    let total = 0
    let count = 0

    vueAspectList.forEach((aspect) => {
      // 数据结构：agentScores[agent][aspect]
      const scoreData = vueAgentScoreData[agent]?.[aspect]
      if (scoreData) {
        total += scoreData.score
        count++
      }
    })

    averages[agent] = count > 0 ? Number((total / count).toFixed(2)) : 0
  })

  return averages
}

// 获取按平均分排序的智能体列表
export const vueGetSortedAgentsByAverage = () => {
  const averages = vueCalculateAgentAverages()
  return [...vueAgentList].sort((a, b) => {
    return averages[b] - averages[a]
  })
}

// Vue Composition API 兼容的hook
export const useAgentMockData = () => {
  // 在Vue中可以使用ref或reactive包装数据
  const agentScores = vueAgentScoreData
  const agentSelections = vueAgentSelections
  const currentSelection = vueCurrentAgentSelection

  // 计算平均分的响应式函数
  const calculateAverages = () => {
    return vueCalculateAgentAverages()
  }

  // 获取特定维度的评分（返回该维度下所有智能体的评分）
  const getScoresByAspect = (aspect: AspectName) => {
    const result: Record<AgentName, AgentScore> = {}
    // 数据结构：agentScores[agent][aspect]，需要遍历所有agent提取指定aspect
    vueAgentList.forEach((agent) => {
      if (agentScores[agent]?.[aspect]) {
        result[agent] = agentScores[agent][aspect]!
      }
    })
    return result
  }

  // 获取特定智能体的所有维度评分
  const getScoresByAgent = (agent: AgentName) => {
    // 数据结构：agentScores[agent][aspect]，直接返回agent的所有维度评分
    return agentScores[agent] || {}
  }

  return {
    agentScores,
    agentSelections,
    currentSelection,
    calculateAverages,
    getScoresByAspect,
    getScoresByAgent,
    getSortedAgents: vueGetSortedAgentsByAverage,
  }
}

// Vue 2.x 兼容的选项式API版本
export const vueMockMixin = {
  data() {
    return {
      vueAgentScores: vueAgentScoreData,
      vueAgentSelections: vueAgentSelections,
      vueCurrentSelection: vueCurrentAgentSelection,
      vueAgentList: vueAgentList,
      vueAspectList: vueAspectList,
    }
  },
  computed: {
    vueAgentAverages() {
      return vueCalculateAgentAverages()
    },
    vueSortedAgents() {
      return vueGetSortedAgentsByAverage()
    },
  },
  methods: {
    vueGetScoresByAspect(aspect: AspectName) {
      const agentScores = (this as any).vueAgentScores
      const agentList = (this as any).vueAgentList
      // 数据结构：agentScores[agent][aspect]，遍历所有agent提取指定aspect
      const result: Record<string, { score: number; reason: string }> = {}
      agentList.forEach((agent: string) => {
        if (agentScores[agent]?.[aspect]) {
          result[agent] = agentScores[agent][aspect]
        }
      })
      return result
    },
    vueGetScoresByAgent(agent: AgentName) {
      const agentScores = (this as any).vueAgentScores
      // 数据结构：agentScores[agent][aspect]，直接返回agent的所有维度评分
      return agentScores[agent] || {}
    },
  },
}
