export type ExportFieldFormat = 'text' | 'currency' | 'datetime' | 'integer';
export type ExportFieldAlign = 'left' | 'center' | 'right';
export type ExportGranularity = 'order' | 'item';

export interface ExportFieldMeta {
  key: string;
  label: string;
  default: boolean;
  width: number;
  align: ExportFieldAlign;
  group: string;
  format: ExportFieldFormat;
  /** 汇总行是否对该列求和 */
  summary?: boolean;
}

export const ORDER_EXPORT_FIELDS: ExportFieldMeta[] = [
  { key: 'id', label: 'ID', default: false, width: 10, align: 'center', group: '基础信息', format: 'integer' },
  { key: 'order_no', label: '订单号', default: true, width: 22, align: 'left', group: '基础信息', format: 'text' },
  { key: 'store_name', label: '诊所名称', default: true, width: 18, align: 'left', group: '基础信息', format: 'text' },
  { key: 'warehouse_name', label: '仓库', default: false, width: 14, align: 'left', group: '基础信息', format: 'text' },
  { key: 'doctor_name', label: '医生', default: true, width: 12, align: 'left', group: '基础信息', format: 'text' },
  { key: 'patient_name', label: '就诊人', default: false, width: 12, align: 'left', group: '基础信息', format: 'text' },
  { key: 'order_type_text', label: '订单类型', default: true, width: 14, align: 'center', group: '基础信息', format: 'text' },
  { key: 'prescription_type_text', label: '处方类型', default: true, width: 14, align: 'center', group: '基础信息', format: 'text' },
  { key: 'pay_type_text', label: '支付类型', default: false, width: 12, align: 'center', group: '基础信息', format: 'text' },
  { key: 'dosage', label: '中药剂数', default: false, width: 10, align: 'center', group: '基础信息', format: 'integer' },
  { key: 'is_free_shipping_text', label: '是否包邮', default: false, width: 10, align: 'center', group: '基础信息', format: 'text' },
  { key: 'items_price', label: '商品总价', default: true, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'market_price', label: '采购价', default: false, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'decoct_price', label: '代煎费用', default: false, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'process_price', label: '加工费用', default: false, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'treatement_price', label: '诊疗费用', default: false, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'total_pay_price', label: '支付总价', default: true, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'trans_expenses', label: '运费', default: false, width: 10, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'pay_time', label: '支付时间', default: true, width: 20, align: 'center', group: '时间', format: 'datetime' },
  { key: 'status_text', label: '订单状态', default: true, width: 12, align: 'center', group: '状态', format: 'text' },
  { key: 'pay_method_text', label: '订单来源', default: false, width: 16, align: 'center', group: '状态', format: 'text' },
  { key: 'delivery_method_text', label: '配送方式', default: true, width: 10, align: 'center', group: '状态', format: 'text' },
  { key: 'remark', label: '留言备注', default: false, width: 20, align: 'left', group: '收货信息', format: 'text' },
  { key: 'express_name', label: '收货人', default: true, width: 12, align: 'left', group: '收货信息', format: 'text' },
  { key: 'express_mobile', label: '收货电话', default: true, width: 14, align: 'left', group: '收货信息', format: 'text' },
  { key: 'express_region', label: '收货省市区', default: false, width: 18, align: 'left', group: '收货信息', format: 'text' },
  { key: 'express_address', label: '收货地址', default: true, width: 24, align: 'left', group: '收货信息', format: 'text' },
  { key: 'is_send_text', label: '是否发货', default: false, width: 10, align: 'center', group: '发货', format: 'text' },
  { key: 'send_time', label: '发货时间', default: false, width: 20, align: 'center', group: '发货', format: 'datetime' },
  { key: 'introduce', label: '发货备注', default: false, width: 20, align: 'left', group: '发货', format: 'text' },
  { key: 'created_at', label: '创建时间', default: true, width: 20, align: 'center', group: '时间', format: 'datetime' },
];

export const ITEM_EXPORT_FIELDS: ExportFieldMeta[] = [
  { key: 'epl_order_no', label: '易票联订单号', default: false, width: 22, align: 'left', group: '基础信息', format: 'text' },
  { key: 'order_no', label: '订单号', default: true, width: 22, align: 'left', group: '基础信息', format: 'text' },
  { key: 'store_name', label: '诊所名称', default: true, width: 18, align: 'left', group: '基础信息', format: 'text' },
  { key: 'drug_name', label: '商品名称', default: true, width: 20, align: 'left', group: '商品', format: 'text' },
  { key: 'specification', label: '规格', default: true, width: 14, align: 'left', group: '商品', format: 'text' },
  { key: 'manufacturer', label: '厂家', default: true, width: 16, align: 'left', group: '商品', format: 'text' },
  { key: 'unit_price', label: '单价', default: true, width: 12, align: 'right', group: '金额', format: 'currency' },
  { key: 'number', label: '数量', default: true, width: 10, align: 'center', group: '商品', format: 'integer' },
  { key: 'line_amount', label: '行金额', default: true, width: 12, align: 'right', group: '金额', format: 'currency', summary: true },
  { key: 'process_price', label: '加工费', default: false, width: 12, align: 'right', group: '金额', format: 'currency' },
  { key: 'treatement_price', label: '诊疗费', default: false, width: 12, align: 'right', group: '金额', format: 'currency' },
  { key: 'total_pay_price', label: '订单总价', default: true, width: 12, align: 'right', group: '金额', format: 'currency' },
  { key: 'trans_expenses', label: '运费', default: false, width: 10, align: 'right', group: '金额', format: 'currency' },
  { key: 'doctor_name', label: '医生', default: true, width: 12, align: 'left', group: '基础信息', format: 'text' },
  { key: 'status_text', label: '订单状态', default: true, width: 12, align: 'center', group: '状态', format: 'text' },
  { key: 'refund_status_text', label: '售后状态', default: false, width: 12, align: 'center', group: '状态', format: 'text' },
  { key: 'created_at', label: '下单时间', default: true, width: 20, align: 'center', group: '时间', format: 'datetime' },
  { key: 'express_name', label: '收件人', default: true, width: 12, align: 'left', group: '收货信息', format: 'text' },
  { key: 'express_mobile', label: '电话', default: true, width: 14, align: 'left', group: '收货信息', format: 'text' },
  { key: 'express_address', label: '地址', default: true, width: 28, align: 'left', group: '收货信息', format: 'text' },
  { key: 'pay_time', label: '支付时间', default: true, width: 20, align: 'center', group: '时间', format: 'datetime' },
];

export function getExportFields(granularity: ExportGranularity): ExportFieldMeta[] {
  return granularity === 'item' ? ITEM_EXPORT_FIELDS : ORDER_EXPORT_FIELDS;
}

export function getDefaultSelectedKeys(granularity: ExportGranularity): string[] {
  return getExportFields(granularity)
    .filter((f) => f.default)
    .map((f) => f.key);
}

export function groupExportFields(fields: ExportFieldMeta[]): Record<string, ExportFieldMeta[]> {
  return fields.reduce<Record<string, ExportFieldMeta[]>>((acc, field) => {
    const group = field.group;
    if (!acc[group]) {
      acc[group] = [];
    }
    acc[group]!.push(field);
    return acc;
  }, {});
}

export function granularityLabel(granularity: ExportGranularity): string {
  return granularity === 'item' ? '商品明细维度' : '订单维度';
}
