import type { VbenFormSchema } from '#/adapter/form';
import type { VxeTableGridOptions } from '#/adapter/vxe-table';

import { getLevelName } from '#/utils/agent';

export function useInviteCodeColumns(): VxeTableGridOptions['columns'] {
  return [
    {
      field: 'id',
      title: 'ID',
      width: 80,
    },
    {
      field: 'code',
      title: '邀请码',
      width: 200,
    },
    {
      field: 'agent_id',
      title: '发放代理ID',
      width: 120,
    },
    {
      field: 'agent_mobile',
      title: '发放代理手机号',
      width: 140,
    },
    {
      field: 'target_level',
      title: '目标等级',
      width: 100,
      formatter: ({ cellValue }: { cellValue: number }) => {
        return getLevelName(cellValue);
      },
    },
    {
      field: 'status',
      title: '状态',
      width: 100,
      cellRender: {
        name: 'CellTag',
        options: [
          { value: 0, color: 'default', label: '未使用' },
          { value: 1, color: 'success', label: '已使用' },
          { value: 2, color: 'error', label: '已失效' },
        ],
      },
    },
    {
      field: 'used_user_id',
      title: '使用用户ID',
      width: 120,
    },
    {
      field: 'used_agent_id',
      title: '使用代理ID',
      width: 120,
    },
    {
      field: 'used_time',
      title: '使用时间',
      width: 160,
    },
    {
      field: 'expire_time',
      title: '过期时间',
      width: 160,
    },
    {
      field: 'remark',
      title: '备注',
      width: 200,
    },
    {
      field: 'create_time',
      title: '创建时间',
      width: 160,
      sortable: true,
    },
  ] as const;
}

export function useInviteCodeFormSchema(): VbenFormSchema[] {
  return [
    {
      component: 'Input',
      fieldName: 'code',
      label: '邀请码',
    },
    {
      component: 'InputNumber',
      fieldName: 'agent_id',
      label: '发放代理ID',
    },
    {
      component: 'Select',
      fieldName: 'status',
      label: '状态',
      componentProps: {
        allowClear: true,
        options: [
          { label: '未使用', value: 0 },
          { label: '已使用', value: 1 },
          { label: '已失效', value: 2 },
        ],
      },
    },
  ];
}
