import type { TaskEntity } from './types';

/** 培训任务送审流程（已发布模板） */
export const TMS_TASK_SUBMIT_FLOW = {
  /** workflow_template.f_id */
  templateId: '874201509296868165',
  /** 流程绑定的在线表单 visualDevId */
  modelId: '874203006613064517',
  enCode: 'tms.TrainingManage.trainerApproval',
} as const;

/** JNPF 流程状态：1=审批中（常见） */
export function isTaskInApproval(task?: Pick<TaskEntity, 'flowState' | 'flowTaskId'> | null) {
  if (!task) return false;
  if (task.flowTaskId) return true;
  const st = task.flowState;
  return st === 1 || st === '1';
}

/** TransferModel.sourceValue / defaultValue 后端类型为 String，禁止传对象/数组 */
function toTransferString(value: unknown): string {
  if (value == null || value === '') return '';
  if (typeof value === 'string') return value;
  if (typeof value === 'number' || typeof value === 'boolean') return String(value);
  if (Array.isArray(value)) {
    return value.map(toTransferString).filter(Boolean).join(',');
  }
  if (typeof value === 'object') {
    const o = value as Record<string, unknown>;
    if (o.id != null && o.id !== '') return String(o.id);
    if (o.value != null && o.value !== '') return String(o.value);
    return '';
  }
  return String(value);
}

/**
 * 构造 actionLaunchFlow 的 dataList（TransferModel 二维数组）。
 * sourceType=2 自定义：直接把 defaultValue/sourceValue 写入目标表单字段。
 */
export function buildTaskSubmitLaunchDataList(task: TaskEntity) {
  const trainees =
    toTransferString(task.trainees) ||
    (Array.isArray(task.traineeIds) ? toTransferString(task.traineeIds) : '');

  const put = (targetField: string, value: unknown) => {
    const text = toTransferString(value);
    return {
      targetField,
      sourceType: 2,
      sourceValue: text,
      defaultValue: text,
    };
  };

  return [
    [
      put('id', task.id),
      put('task_no', task.taskNo),
      put('publish_status', task.publishStatus || 'draft'),
      put('category', task.category),
      put('source_type', task.sourceType),
      put('source_plan_no', task.sourcePlanNo),
      put('source_id', task.sourceId),
      put('source_item_id', task.sourceItemId),
      put('subject', task.subject),
      put('key_points', task.keyPoints),
      put('train_mode', task.trainMode),
      put('eval_mode', task.evalMode),
      put('task_kind', task.taskKind),
      put('prev_task_no', task.prevTaskNo),
      put('teacher_id', task.teacherId),
      put('trainees', trainees),
      put('start_time', task.startTime),
      put('end_time', task.endTime),
      put('close_time', task.closeTime),
      put('place_id', task.placeId),
      put('place_no', task.placeNo),
      put('place_name', task.placeName),
      put('material_id', task.materialId),
      put('material_no', task.materialNo),
      put('paper_id', task.paperId),
      put('paper_name', task.paperName),
      put('exam_start', task.examStart),
      put('exam_end', task.examEnd),
      put('retake_limit', task.retakeLimit),
      put('pass_score', task.passScore),
      put('quiz_ratio', task.quizRatio),
      put('overdue_remind', task.overdueRemind),
      put('invite_flag', task.inviteFlag),
      put('remark', task.remark),
    ],
  ];
}
