import type { TemplateDetail, TemplateListItem } from '#/api/x/eln/templates';
import type { onlineUtils } from '#/utils/jnpf';

import { formatToDateTime } from '@jnpf/utils';

import { getTemplateDetail } from '#/api/x/eln/templates';

export type LocalTemplateForm = { open: (config: Parameters<typeof onlineUtils.openFormModal>[0]) => Promise<void> };

export async function openTemplateDetailForm(form: LocalTemplateForm | undefined, row: TemplateListItem, type?: 'modal') {
  if (!form) return;
  const response = await getTemplateDetail(row.id);
  const detail = normalizeTemplateDetail(response.data);
  await form.open({
    fieldMapping: {
      biz_enabled: 'detail.bizEnabledLabel',
      chuangjian_renyuan: 'detail.chuangjianRenyuanMingcheng',
      chuangjian_shijian: 'detail.chuangjianShijianText',
      jianyan_xiangmu: 'detail.jianyanXiangmuMingcheng',
      muban_fenlei: 'detail.mubanFenleiMingcheng',
      muban_mincheng: 'detail.mubanMingcheng',
      shengxiao_riqi: 'detail.shengxiaoRiqiText',
      shiyan_buzhou: 'detail.shiyanBuzhou',
    },
    id: row.id,
    mode: 'detail',
    modelId: '854727805680747141',
    params: { detail },
    title: `模板详情 - ${row.mubanBianhao} ${row.mubanBanben}`,
    type,
  });
}

function normalizeTemplateDetail(detail: TemplateDetail) {
  return {
    ...detail,
    bizEnabledLabel: detail.bizEnabled === 'enabled' ? '启用' : '停用',
    chuangjianRenyuanMingcheng: detail.chuangjianRenyuanMingcheng || detail.chuangjianRenyuan || '-',
    chuangjianShijianText: formatDetailDate(detail.chuangjianShijian, 'YYYY-MM-DD HH:mm:ss'),
    jianyanXiangmuMingcheng: detail.jianyanXiangmuMingcheng || detail.jianyanXiangmu || '-',
    mubanFenleiMingcheng: detail.mubanFenleiMingcheng || detail.mubanFenlei || '-',
    mubanMingcheng: detail.mubanMingcheng || '-',
    shengxiaoRiqiText: formatDetailDate(detail.shengxiaoRiqi, 'YYYY-MM-DD'),
    shiyanBuzhou: detail.shiyanBuzhou || '-',
  };
}

function formatDetailDate(value: string | undefined, format: string) {
  return value ? formatToDateTime(value, format) : '-';
}
