import dayjs from 'dayjs';
import type {
  WorkbenchActivityItemSource,
  WorkbenchKpiSource,
  WorkbenchMyExecutionItemSource,
  WorkbenchMyWeekWorklogSource,
  WorkbenchOwnedProjectItemSource,
  WorkbenchProgressBarSource,
  WorkbenchProjectHealthCardSource,
  WorkbenchProjectItemSource,
  WorkbenchTeamLoadSource,
  WorkbenchTeamWorklogSource,
  WorkbenchTodoItemSource
} from './homepage';

const now = dayjs();
const iso = (date: dayjs.Dayjs) => date.format('YYYY-MM-DD HH:mm:ss');

export const workbenchKpiMock = {
  todo: { count: 8, diffFromYesterday: 1 },
  task: { count: 14, diffFromYesterday: -1 },
  project: { count: 3, activeCount: 2 },
  requirement: { count: 6, pendingReview: 2 }
} satisfies WorkbenchKpiSource;

export const workbenchTodoMock = [
  {
    id: 'todo-1',
    category: 'task',
    title: '支付回调接口联调遗留问题处理',
    createdTime: iso(now.subtract(7, 'day').hour(9).minute(20)),
    deadline: iso(now.subtract(1, 'day').hour(17).minute(30)),
    source: '收银台 V3 · 后端联调',
    priority: 'high',
    overdue: true,
    routeKey: 'project_list'
  },
  {
    id: 'todo-2',
    category: 'ticket',
    title: '工单 #1018 用户登录异常',
    createdTime: iso(now.subtract(6, 'day').hour(11).minute(0)),
    deadline: iso(now.subtract(2, 'day').hour(10).minute(0)),
    source: '客户支持 · 紧急',
    priority: 'mid',
    overdue: true,
    routeKey: 'ticket'
  },
  {
    id: 'todo-3',
    category: 'approval',
    title: '李四 · 第 21 周周报待审批',
    createdTime: iso(now.subtract(2, 'day').hour(18).minute(20)),
    deadline: null,
    source: '周报 · 产品组',
    priority: 'mid',
    routeKey: 'workbench'
  },
  {
    id: 'todo-4',
    category: 'personal',
    title: '提交昨日工时与本周计划',
    createdTime: iso(now.subtract(4, 'day').hour(8).minute(30)),
    deadline: iso(now.hour(18).minute(0)),
    source: '个人事项 · 工时',
    priority: 'mid',
    routeKey: 'personal-center_my-item'
  },
  {
    id: 'todo-5',
    category: 'task',
    title: '会员等级提示文案最终校对',
    createdTime: iso(now.subtract(3, 'day').hour(10).minute(10)),
    deadline: iso(now.hour(20).minute(0)),
    source: '会员中心 · 文案',
    priority: 'high',
    routeKey: 'project_list'
  },
  {
    id: 'todo-6',
    category: 'ticket',
    title: '工单 #1024 客户反馈待处理',
    createdTime: iso(now.subtract(3, 'day').hour(15).minute(0)),
    deadline: iso(now.add(2, 'day').hour(17).minute(0)),
    source: '王五 · 客户反馈',
    priority: 'mid',
    routeKey: 'ticket'
  },
  {
    id: 'todo-7',
    category: 'personal',
    title: '复盘上周交付遗留并归档',
    createdTime: iso(now.subtract(2, 'day').hour(9).minute(0)),
    deadline: iso(now.add(4, 'day').hour(18).minute(0)),
    source: '个人事项 · 复盘',
    priority: 'low',
    routeKey: 'personal-center_my-item'
  },
  {
    id: 'todo-8',
    category: 'task',
    title: '订单中心结算文档评审',
    createdTime: iso(now.subtract(2, 'day').hour(13).minute(20)),
    deadline: iso(now.add(5, 'day').hour(15).minute(0)),
    source: '订单中心 · 文档',
    priority: 'mid',
    routeKey: 'project_list'
  },
  {
    id: 'todo-9',
    category: 'approval',
    title: '张三 · 5 月加班 12h 申请待审批',
    createdTime: iso(now.subtract(1, 'day').hour(17).minute(0)),
    deadline: null,
    source: '加班申请 · 研发组',
    priority: 'mid',
    routeKey: 'workbench'
  },
  {
    id: 'todo-10',
    category: 'personal',
    title: '安排下周外出培训行程',
    createdTime: iso(now.subtract(1, 'day').hour(19).minute(40)),
    deadline: iso(now.add(10, 'day').hour(12).minute(0)),
    source: '个人事项 · 行程',
    priority: 'low',
    routeKey: 'personal-center_my-item'
  },
  {
    id: 'todo-11',
    category: 'task',
    title: '会员中心首页骨架屏改造',
    createdTime: iso(now.subtract(20, 'hour')),
    deadline: iso(now.add(12, 'day').hour(18).minute(0)),
    source: '会员中心 · 前端',
    priority: 'low',
    routeKey: 'project_list'
  },
  {
    id: 'todo-12',
    category: 'ticket',
    title: '工单 #1031 提示信息文案优化',
    createdTime: iso(now.subtract(8, 'hour')),
    deadline: iso(now.add(14, 'day').hour(17).minute(0)),
    source: '客户支持 · 普通',
    priority: 'low',
    routeKey: 'ticket'
  }
] satisfies WorkbenchTodoItemSource[];

export const workbenchActivityMock = [
  {
    id: 'act-1',
    actor: '张三',
    action: '提交了需求评审申请',
    target: '订单导出 V2',
    targetKind: 'requirement',
    time: iso(now.subtract(10, 'minute'))
  },
  {
    id: 'act-2',
    actor: '李四',
    action: '完成了任务',
    target: '支付回调接口联调',
    targetKind: 'task',
    time: iso(now.subtract(2, 'hour'))
  },
  {
    id: 'act-3',
    actor: '李四',
    action: '在需求中 @ 了你',
    target: '会员等级',
    targetKind: 'requirement',
    time: iso(now.subtract(1, 'day').hour(17).minute(23)),
    mentioned: true
  },
  {
    id: 'act-4',
    actor: '王五',
    action: '提交了工单',
    target: '#1024 · 客户反馈',
    targetKind: 'ticket',
    time: iso(now.subtract(1, 'day').hour(15).minute(8))
  },
  {
    id: 'act-5',
    actor: '赵六',
    action: '把项目状态调整为',
    target: '试运行（订单中心）',
    targetKind: 'project',
    time: iso(now.subtract(2, 'day').hour(10).minute(0))
  },
  {
    id: 'act-6',
    actor: '系统',
    action: '提醒：你有 1 项任务即将逾期',
    target: 'API 返回结构调整评审',
    targetKind: 'requirement',
    time: iso(now.subtract(3, 'day').hour(9).minute(30))
  },
  {
    id: 'act-7',
    actor: '钱七',
    action: '更新了产品资料',
    target: '收银台 V3 · 定位说明',
    targetKind: 'product',
    time: iso(now.subtract(4, 'day').hour(16).minute(45))
  }
] satisfies WorkbenchActivityItemSource[];

export const workbenchMyExecutionMock = [
  // 商城 V2 升级 · 3 条（分组测试主项目）
  {
    id: 'exec-1',
    executionName: '迭代 24.05 · 后端联调',
    projectId: 'prj-mall-v2',
    projectName: '商城 V2 升级',
    statusCode: 'active',
    statusName: '进行中',
    priority: '1',
    plannedStartDate: iso(now.subtract(10, 'day').startOf('day')),
    plannedEndDate: iso(now.add(3, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(8, 'day').startOf('day')),
    actualEndDate: null,
    progressRate: 68,
    projectRequirementId: 'req-mall-001',
    projectRequirementName: '订单履约后端拆分（一期）'
  },
  {
    id: 'exec-2',
    executionName: '会员等级提示文案',
    projectId: 'prj-mall-v2',
    projectName: '商城 V2 升级',
    statusCode: 'active',
    statusName: '进行中',
    priority: '3',
    plannedStartDate: iso(now.subtract(4, 'day').startOf('day')),
    plannedEndDate: iso(now.add(6, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(3, 'day').startOf('day')),
    actualEndDate: null,
    progressRate: 25,
    projectRequirementId: 'req-mall-002',
    projectRequirementName: '会员等级 UI 升级'
  },
  {
    id: 'exec-3',
    executionName: '订单退款流程拆分',
    projectId: 'prj-mall-v2',
    projectName: '商城 V2 升级',
    statusCode: 'paused',
    statusName: '已暂停',
    priority: '2',
    plannedStartDate: iso(now.subtract(20, 'day').startOf('day')),
    plannedEndDate: iso(now.add(10, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(15, 'day').startOf('day')),
    actualEndDate: null,
    progressRate: 50
  },
  // 风控引擎 · 2 条（含一条计划已过期）
  {
    id: 'exec-4',
    executionName: '关键路径优化',
    projectId: 'prj-risk',
    projectName: '风控引擎',
    statusCode: 'active',
    statusName: '进行中',
    priority: '1',
    plannedStartDate: iso(now.subtract(20, 'day').startOf('day')),
    plannedEndDate: iso(now.subtract(2, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(18, 'day').startOf('day')),
    actualEndDate: null,
    progressRate: 42,
    projectRequirementId: 'req-risk-001',
    projectRequirementName: '风控决策链路压缩'
  },
  {
    id: 'exec-5',
    executionName: '黑名单规则改造',
    projectId: 'prj-risk',
    projectName: '风控引擎',
    statusCode: 'pending',
    statusName: '待开始',
    priority: '3',
    plannedStartDate: iso(now.add(5, 'day').startOf('day')),
    plannedEndDate: iso(now.add(20, 'day').endOf('day')),
    actualStartDate: null,
    actualEndDate: null,
    progressRate: 0
  },
  // 收银台 V3 · 1 条
  {
    id: 'exec-6',
    executionName: '多币种支持 · 计算引擎',
    projectId: 'prj-cashier',
    projectName: '收银台 V3',
    statusCode: 'pending',
    statusName: '待开始',
    priority: '2',
    plannedStartDate: iso(now.add(2, 'day').startOf('day')),
    plannedEndDate: iso(now.add(15, 'day').endOf('day')),
    actualStartDate: null,
    actualEndDate: null,
    progressRate: 0,
    projectRequirementId: 'req-cashier-001',
    projectRequirementName: '多币种结算（含汇率快照）'
  },
  // 订单中心 · 1 条
  {
    id: 'exec-7',
    executionName: '订单导出 V2',
    projectId: 'prj-order',
    projectName: '订单中心',
    statusCode: 'active',
    statusName: '进行中',
    priority: '4',
    plannedStartDate: iso(now.subtract(15, 'day').startOf('day')),
    plannedEndDate: iso(now.add(7, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(12, 'day').startOf('day')),
    actualEndDate: null,
    progressRate: 35
  },
  // 已完成 —— builder 应过滤掉
  {
    id: 'exec-8',
    executionName: '上一迭代 · 前端联调',
    projectId: 'prj-mall-v2',
    projectName: '商城 V2 升级',
    statusCode: 'completed',
    statusName: '已完成',
    priority: '3',
    plannedStartDate: iso(now.subtract(40, 'day').startOf('day')),
    plannedEndDate: iso(now.subtract(15, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(38, 'day').startOf('day')),
    actualEndDate: iso(now.subtract(14, 'day').endOf('day')),
    progressRate: 100
  },
  // 已取消 —— builder 应过滤掉
  {
    id: 'exec-9',
    executionName: '促销活动 · 春节专题',
    projectId: 'prj-marketing',
    projectName: '营销中台',
    statusCode: 'cancelled',
    statusName: '已取消',
    priority: '3',
    plannedStartDate: iso(now.subtract(30, 'day').startOf('day')),
    plannedEndDate: iso(now.subtract(10, 'day').endOf('day')),
    actualStartDate: null,
    actualEndDate: null,
    progressRate: 15
  },
  // 进度 100 但状态未扭转 —— builder 应过滤掉
  {
    id: 'exec-10',
    executionName: '风控规则升级（待扭转）',
    projectId: 'prj-risk',
    projectName: '风控引擎',
    statusCode: 'active',
    statusName: '进行中',
    priority: '2',
    plannedStartDate: iso(now.subtract(8, 'day').startOf('day')),
    plannedEndDate: iso(now.add(1, 'day').endOf('day')),
    actualStartDate: iso(now.subtract(6, 'day').startOf('day')),
    actualEndDate: null,
    progressRate: 100
  }
] satisfies WorkbenchMyExecutionItemSource[];

export const workbenchOwnedProjectMock = [
  {
    id: 'p1',
    name: '商城 V2 升级',
    code: 'MALL-V2',
    progress: 70,
    executionCount: 5,
    taskCount: 32,
    memberCount: 6,
    overdueCount: 1,
    remainingDays: 12,
    myRole: '项目负责人',
    milestones: [
      { id: 'm1', title: 'SSO 改造提测', timeLabel: '今日 18:00', tone: 'amber' },
      { id: 'm2', title: '迭代 24.05 关闭', timeLabel: '今日', tone: 'amber' },
      { id: 'm3', title: '多币种支持评审', timeLabel: '05-26', tone: 'slate' }
    ],
    members: [
      { name: '张三', load: 50, level: 'ok' },
      { name: '李四', load: 30, level: 'ok' },
      { name: '王五', load: 90, level: 'over' }
    ]
  },
  {
    id: 'p2',
    name: '风控引擎接入',
    code: 'RISK-ENGINE',
    progress: 45,
    executionCount: 3,
    taskCount: 18,
    memberCount: 4,
    overdueCount: 2,
    remainingDays: 30,
    myRole: '项目负责人',
    milestones: [
      { id: 'm4', title: '分片设计评审', timeLabel: '明日', tone: 'amber' },
      { id: 'm5', title: '缓存穿透优化交付', timeLabel: '05-28', tone: 'slate' }
    ],
    members: [
      { name: '李四', load: 30, level: 'ok' },
      { name: '钱七', load: 65, level: 'warn' }
    ]
  }
] satisfies WorkbenchOwnedProjectItemSource[];

export const workbenchProjectMock = [
  {
    id: 'prj-1',
    name: '收银台 V3',
    code: 'CASHIER-V3',
    status: 'active',
    myRole: '项目负责人',
    progress: 72,
    myTaskCount: 6,
    myPendingTaskCount: 2,
    lastActiveTime: iso(now.subtract(35, 'minute'))
  },
  {
    id: 'prj-2',
    name: '会员中心',
    code: 'MEMBER',
    status: 'active',
    myRole: '后端负责人',
    progress: 58,
    myTaskCount: 4,
    myPendingTaskCount: 1,
    lastActiveTime: iso(now.subtract(3, 'hour'))
  },
  {
    id: 'prj-3',
    name: '订单中心',
    code: 'ORDER-CENTER',
    status: 'preview',
    myRole: '产品经理',
    progress: 95,
    myTaskCount: 4,
    myPendingTaskCount: 0,
    lastActiveTime: iso(now.subtract(2, 'day').hour(10))
  }
] satisfies WorkbenchProjectItemSource[];

const currentWeekStart = now.startOf('isoWeek').format('YYYY-MM-DD');
const previousWeekStart = now.subtract(1, 'week').startOf('isoWeek').format('YYYY-MM-DD');

export const workbenchMyWeekWorklogMock = {
  current: {
    weekStart: currentWeekStart,
    weeklyFilledHours: 5,
    dailyHours: [4, 7, 6, 8, 7.5],
    target: 40,
    distribution: [
      { key: 'prj-mall-v2', label: '商城 V2 升级', hours: 12.5, kind: 'project', projectId: 'prj-mall-v2' },
      { key: 'prj-risk', label: '风控引擎接入', hours: 8, kind: 'project', projectId: 'prj-risk' },
      { key: 'prj-cashier', label: '收银台 V3', hours: 6, kind: 'project', projectId: 'prj-cashier' },
      { key: 'prj-order', label: '订单中心', hours: 5, kind: 'project', projectId: 'prj-order' },
      { key: 'prj-member', label: '会员中心', hours: 3, kind: 'project', projectId: 'prj-member' },
      { key: 'prj-marketing', label: '营销中台', hours: 2, kind: 'project', projectId: 'prj-marketing' },
      { key: 'personal', label: '个人事项', hours: 4, kind: 'personal' },
      { key: 'other', label: '其他', hours: 2, kind: 'other' }
    ]
  },
  previous: {
    weekStart: previousWeekStart,
    weeklyFilledHours: 0,
    dailyHours: [8, 8, 7, 8, 7],
    target: 40,
    distribution: [
      { key: 'prj-mall-v2', label: '商城 V2 升级', hours: 15, kind: 'project', projectId: 'prj-mall-v2' },
      { key: 'prj-risk', label: '风控引擎接入', hours: 9, kind: 'project', projectId: 'prj-risk' },
      { key: 'prj-cashier', label: '收银台 V3', hours: 7, kind: 'project', projectId: 'prj-cashier' },
      { key: 'personal', label: '个人事项', hours: 5, kind: 'personal' },
      { key: 'other', label: '其他', hours: 2, kind: 'other' }
    ]
  }
} satisfies WorkbenchMyWeekWorklogSource;

// 团队工时口径约定：「团队 = 当前用户所在团队，含自己」。
// 后端 /workbench/team-worklog 接口返回的 members 必须包含当前用户自己——
// 这样没有下级的人（普通员工）切到「团队工时」tab 也至少有自己这一条数据，
// 不会出现空白态。约定 members[0] = 当前用户，UI 用「（我）」后缀标识。
export const workbenchTeamWorklogMock = {
  current: {
    weekStart: currentWeekStart,
    expectedHoursPerMember: 40,
    members: [
      {
        memberId: 'u-1',
        memberName: '张三（我）',
        items: [
          { key: 'prj-cashier', label: '收银台 V3', hours: 22, kind: 'project' },
          { key: 'prj-order', label: '订单中心', hours: 10, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 4, kind: 'personal' },
          { key: 'other', label: '其他', hours: 2, kind: 'other' }
        ]
      },
      {
        memberId: 'u-2',
        memberName: '李四',
        items: [
          { key: 'prj-cashier', label: '收银台 V3', hours: 18, kind: 'project' },
          { key: 'prj-member', label: '会员中心', hours: 20, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 3, kind: 'personal' },
          { key: 'other', label: '其他', hours: 1, kind: 'other' }
        ]
      },
      {
        memberId: 'u-3',
        memberName: '王五',
        items: [
          { key: 'prj-member', label: '会员中心', hours: 14, kind: 'project' },
          { key: 'prj-order', label: '订单中心', hours: 12, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 2, kind: 'personal' },
          { key: 'other', label: '其他', hours: 2, kind: 'other' }
        ]
      },
      {
        memberId: 'u-4',
        memberName: '赵六',
        items: [
          { key: 'prj-cashier', label: '收银台 V3', hours: 24, kind: 'project' },
          { key: 'prj-order', label: '订单中心', hours: 18, kind: 'project' },
          { key: 'prj-member', label: '会员中心', hours: 4, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 2, kind: 'personal' }
        ]
      },
      {
        memberId: 'u-5',
        memberName: '钱七',
        items: [
          { key: 'prj-order', label: '订单中心', hours: 14, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 6, kind: 'personal' },
          { key: 'other', label: '其他', hours: 5, kind: 'other' }
        ]
      }
    ]
  },
  previous: {
    weekStart: previousWeekStart,
    expectedHoursPerMember: 40,
    members: [
      {
        memberId: 'u-1',
        memberName: '张三（我）',
        items: [
          { key: 'prj-cashier', label: '收银台 V3', hours: 26, kind: 'project' },
          { key: 'prj-order', label: '订单中心', hours: 8, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 3, kind: 'personal' },
          { key: 'other', label: '其他', hours: 3, kind: 'other' }
        ]
      },
      {
        memberId: 'u-2',
        memberName: '李四',
        items: [
          { key: 'prj-cashier', label: '收银台 V3', hours: 15, kind: 'project' },
          { key: 'prj-member', label: '会员中心', hours: 22, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 4, kind: 'personal' }
        ]
      },
      {
        memberId: 'u-3',
        memberName: '王五',
        items: [
          { key: 'prj-member', label: '会员中心', hours: 16, kind: 'project' },
          { key: 'prj-order', label: '订单中心', hours: 10, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 5, kind: 'personal' },
          { key: 'other', label: '其他', hours: 3, kind: 'other' }
        ]
      },
      {
        memberId: 'u-4',
        memberName: '赵六',
        items: [
          { key: 'prj-cashier', label: '收银台 V3', hours: 20, kind: 'project' },
          { key: 'prj-order', label: '订单中心', hours: 16, kind: 'project' },
          { key: 'prj-member', label: '会员中心', hours: 6, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 3, kind: 'personal' }
        ]
      },
      {
        memberId: 'u-5',
        memberName: '钱七',
        items: [
          { key: 'prj-order', label: '订单中心', hours: 16, kind: 'project' },
          { key: 'personal', label: '个人事项', hours: 4, kind: 'personal' },
          { key: 'other', label: '其他', hours: 4, kind: 'other' }
        ]
      }
    ]
  }
} satisfies { current: WorkbenchTeamWorklogSource; previous: WorkbenchTeamWorklogSource };

// 项目 key 与 workbenchTeamWorklogMock 对齐，保证跨 widget 项目色一致
export const workbenchTeamLoadMock = {
  weekStart: now.startOf('isoWeek').format('YYYY-MM-DD'),
  members: [
    // 高负载：进行中 7 或 临期+逾期 ≥ 2
    {
      memberId: 'u-1',
      memberName: '张三',
      items: [
        { key: 'prj-cashier', label: '收银台 V3', kind: 'project', count: 4 },
        { key: 'prj-order', label: '订单中心', kind: 'project', count: 2 },
        { key: 'personal', label: '个人事项', kind: 'personal', count: 1 }
      ],
      dueSoon: 2,
      overdue: 1
    },
    {
      memberId: 'u-4',
      memberName: '赵六',
      items: [
        { key: 'prj-cashier', label: '收银台 V3', kind: 'project', count: 2 },
        { key: 'prj-order', label: '订单中心', kind: 'project', count: 2 },
        { key: 'prj-member', label: '会员中心', kind: 'project', count: 1 }
      ],
      dueSoon: 1,
      overdue: 2
    },
    // 中负载：进行中 ≥ 4 或 临期+逾期 ≥ 1
    {
      memberId: 'u-2',
      memberName: '李四',
      items: [
        { key: 'prj-cashier', label: '收银台 V3', kind: 'project', count: 2 },
        { key: 'prj-member', label: '会员中心', kind: 'project', count: 2 }
      ],
      dueSoon: 1,
      overdue: 0
    },
    {
      memberId: 'u-3',
      memberName: '王五',
      items: [
        { key: 'prj-member', label: '会员中心', kind: 'project', count: 2 },
        { key: 'prj-order', label: '订单中心', kind: 'project', count: 1 }
      ],
      dueSoon: 1,
      overdue: 0
    },
    // 正常
    {
      memberId: 'u-5',
      memberName: '钱七',
      items: [
        { key: 'prj-order', label: '订单中心', kind: 'project', count: 1 },
        { key: 'personal', label: '个人事项', kind: 'personal', count: 1 }
      ],
      dueSoon: 0,
      overdue: 0
    }
  ]
} satisfies WorkbenchTeamLoadSource;

export const workbenchProjectHealthMock = [
  {
    projectId: 'prj-1',
    projectName: '收银台 V3',
    code: 'CASHIER-V3',
    health: 'yellow',
    riskCount: 2,
    overdueTasks: 3,
    backlogRequirements: 2
  },
  {
    projectId: 'prj-2',
    projectName: '会员中心',
    code: 'MEMBER',
    health: 'green',
    riskCount: 0,
    overdueTasks: 0,
    backlogRequirements: 1
  },
  {
    projectId: 'prj-3',
    projectName: '订单中心',
    code: 'ORDER',
    health: 'red',
    riskCount: 4,
    overdueTasks: 5,
    backlogRequirements: 6
  }
] satisfies WorkbenchProjectHealthCardSource[];

export const workbenchProgressChartMock = [
  { projectId: 'prj-1', projectName: '收银台 V3', weekCompletionRate: 78 },
  { projectId: 'prj-2', projectName: '会员中心', weekCompletionRate: 62 },
  { projectId: 'prj-3', projectName: '订单中心', weekCompletionRate: 45 }
] satisfies WorkbenchProgressBarSource[];
