import type { Dayjs } from 'dayjs';

import type { PageParam, PageResult } from '@vben/request';

import { requestClient } from '#/api/request';

export namespace LicenseApi {
  /** License信息 */
  export interface License {
    id: number; // 主键
    customerId?: number; // 客户ID
    projectId?: number; // 项目ID
    serialNo?: string; // sn
    expiryDate: Dayjs | string; // 到期时间
    neList: number[]; // 网元
    userNumber: number; // 用户数
    ranNumber: number; // 基站数
    activationCode: string; // 激活码
    fileUrl: string; // 激活码
    licenseContent: string; // License内容
    applicant: number; // 申请人
    applicationTime: Dayjs | string; // 申请时间
    approver: number; // 审批人
    status: number; // 状态
    remark: string; // 备注
    action: number; // 操作
    neCodeList: NeCode[]; // 操作
    oldLicense: License;
    hasHistory: boolean;
    applyCount: number; // 申请次数
    showUpload?: boolean; // 是否显示上传按钮
    customerName?: string; // 客户名称
    projectName?: string; // 项目名称
  }
  export interface NeCode {
    id: number; // 主键
    neList: number[]; // 网元开关
    activationCode: string; // 激活码
    fileUrl: string; // 文件地址
  }
}

/** 查询License分页 */
export function getLicensePage(params: PageParam) {
  return requestClient.get<PageResult<LicenseApi.License>>(
    '/license/license/page',
    { params },
  );
}

/** 查询License详情 */
export function getLicense(id: number) {
  return requestClient.get<LicenseApi.License>(`/license/license/get?id=${id}`);
}

/** 查询License历史 */
export function getLicenseHistory(id: number) {
  return requestClient.get<LicenseApi.License[]>(
    `/license/license/history?id=${id}`,
  );
}

/** 查询License到期 */
export function getLicenseExpiry() {
  return requestClient.get<LicenseApi.License[]>(
    `/license/license/list-expiry`,
  );
}

/** 新增License */
export function createLicense(data: LicenseApi.License) {
  return requestClient.post('/license/license/create', data);
}

/** 修改License */
export function updateLicenseDetail(data: LicenseApi.NeCode) {
  return requestClient.put('/license/license/update-detail', data);
}

/** 修改License */
export function updateLicense(data: LicenseApi.License) {
  return requestClient.put('/license/license/update', data);
}

/** 下载导入模板 */
export function importTemplate() {
  return requestClient.download('/license/license/get-import-template');
}

/** 导入License */
export function importLicense(file: File, updateSupport: boolean) {
  return requestClient.upload('/license/license/import', {
    file,
    updateSupport,
  });
}

/** 下载生成代码 */
export function downloadLicense(id: number) {
  return requestClient.download(`/license/license/download?id=${id}`);
}

/** 重新License */
export function reapplyLicense(data: LicenseApi.License) {
  return requestClient.put('/license/license/reapply', data);
}

/** 申请License */
export function applyLicense(data: LicenseApi.License) {
  return requestClient.put('/license/license/apply', data);
}

/** 生成License */
export function generateLicense(id: number) {
  return requestClient.get(`/license/license/generate?id=${id}`);
}

/** 删除License */
export function deleteLicense(id: number) {
  return requestClient.delete(`/license/license/delete?id=${id}`);
}

/** 导出License */
export function exportLicense(params: any) {
  return requestClient.download('/license/license/export-excel', params);
}

/** License SN是否唯一 */
export async function isLicenseSnUnique(
  sn: string,
  id?: LicenseApi.License['id'],
) {
  return requestClient.get<boolean>('/license/license/sn-unique', {
    params: { id, sn },
  });
}
