import type { SxtKanbanItem, SxtKanbanRow } from '#/api/x/lims/shiyanshi/sxt';

const renwuStatusLabels: Record<SxtKanbanItem['renwu_zhuangtai'], string> = {
  blocked_config_invalid: '配置无效（已阻断）',
  generated: '已请验',
  generating: '未执行',
  pending: '未执行',
};

export function getTaskRowKey(
  item: Pick<SxtKanbanItem | SxtKanbanRow, 'quyang_didian' | 'quyangdian_bianhao' | 'suoshu_chejian' | 'yangpin_leixing'> & {
    quyangdian_id?: string;
  },
) {
  if (item.quyangdian_id) return item.quyangdian_id;
  return `${item.yangpin_leixing || ''}__${item.suoshu_chejian || ''}__${item.quyang_didian || ''}__${item.quyangdian_bianhao || ''}`;
}

export function buildTaskCellMap<
  T extends Pick<SxtKanbanItem, 'jihua_riqi' | 'quyang_didian' | 'quyangdian_bianhao' | 'suoshu_chejian' | 'yangpin_leixing'> & {
    quyangdian_id?: string;
  },
>(items: T[]) {
  const result = new Map<string, T[]>();
  for (const item of items) {
    const key = `${getTaskRowKey(item)}|${item.jihua_riqi}`;
    const cellItems = result.get(key) || [];
    cellItems.push(item);
    result.set(key, cellItems);
  }
  return result;
}

export function getTaskCellState(items: Array<Pick<SxtKanbanItem, 'renwu_zhuangtai'>>) {
  if (items.some((item) => item.renwu_zhuangtai === 'blocked_config_invalid')) return 'blocked';
  return items.length > 0 && items.every((item) => item.renwu_zhuangtai === 'generated') ? 'done' : 'pending';
}

export function getTaskDisplayStatus(item: Pick<SxtKanbanItem, 'renwu_zhuangtai'>) {
  return renwuStatusLabels[item.renwu_zhuangtai] || '未执行';
}
