import { http } from "@/utils/http";

/**
 * 企业小程序二维码 DTO
 */
export interface QyMpQrcodeDTO {
  /** 二维码ID */
  qrcodeId?: number;
  /** 企业微信ID */
  corpid?: string;
  /** 二维码名称 */
  name?: string;
  /** 小程序码参数 */
  scene?: string;
  /** 小程序页面路径 */
  page?: string;
  /** 二维码链接 */
  qrcodeUrl?: string;
  /** 创建者 */
  creatorName?: string;
  /** 创建时间 */
  createTimeStr?: string;
  /** 更新者 */
  updaterName?: string;
  /** 更新时间 */
  updateTimeStr?: string;
  /** 删除标志 */
  deleted?: boolean;
}

/**
 * 企业小程序二维码实体
 */
export interface QyMpQrcodeEntity {
  /** 二维码唯一ID */
  qrcodeId?: number;
  /** 企业微信id */
  corpid?: string;
  /** 二维码名称 */
  name?: string;
  /** 小程序码参数，最大32个可见字符 */
  scene?: string;
  /** 小程序页面路径 */
  page?: string;
  /** 二维码链接 */
  qrcodeUrl?: string;
}

/**
 * 查询小程序二维码参数
 */
export interface SearchMpQrcodeQuery extends BasePageQuery {
  /** 企业微信ID */
  corpid?: string;
  /** 二维码名称 */
  name?: string;
  /** 小程序码参数 */
  scene?: string;
  /** 创建开始时间 */
  createStartTime?: string;
  /** 创建结束时间 */
  createEndTime?: string;
}

/**
 * 新增二维码命令
 */
export interface AddMpQrcodeCommand {
  /** 企业微信ID */
  corpid: string;
  /** 二维码名称 */
  name: string;
  /** 小程序码参数 */
  scene?: string;
  /** 小程序页面路径 */
  page?: string;
}

/**
 * 修改二维码命令
 */
export interface UpdateMpQrcodeCommand extends AddMpQrcodeCommand {
  /** 二维码ID */
  qrcodeId: number;
}

/**
 * 获取二维码列表
 * @param params 查询参数
 * @returns 分页二维码列表
 */
export const getMpQrcodeListApi = (params: SearchMpQrcodeQuery) => {
  return http.request<ResponseData<PageDTO<QyMpQrcodeDTO>>>("get", "/qywx/mp-qrcodes", {
    params
  });
};

/**
 * 获取二维码详情
 * @param id 二维码ID
 * @returns 二维码详情
 */
export const getMpQrcodeDetailApi = (id: number) => {
  return http.request<ResponseData<QyMpQrcodeDTO>>("get", `/qywx/mp-qrcodes/${id}`);
};

/**
 * 新增二维码
 * @param data 新增参数
 * @returns 操作结果
 */
export const addMpQrcodeApi = (data: AddMpQrcodeCommand) => {
  return http.request<ResponseData<void>>("post", "/qywx/mp-qrcodes", { data });
};

/**
 * 修改二维码
 * @param id 二维码ID
 * @param data 修改参数
 * @returns 操作结果
 */
export const updateMpQrcodeApi = (id: number, data: UpdateMpQrcodeCommand) => {
  return http.request<ResponseData<void>>("put", `/qywx/mp-qrcodes/${id}`, { data });
};

/**
 * 删除二维码
 * @param ids 二维码ID数组
 * @returns 操作结果
 */
export const deleteMpQrcodeApi = (ids: number[]) => {
  return http.request<ResponseData<void>>("delete", `/qywx/mp-qrcodes/${ids.join(',')}`);
};

/**
 * 根据企业ID查询二维码
 * @param corpid 企业ID
 * @returns 二维码列表
 */
export const getMpQrcodeByCorpidApi = (corpid: string) => {
  return http.request<ResponseData<QyMpQrcodeEntity[]>>("get", `/qywx/mp-qrcodes/by-corpid/${corpid}`);
};

/**
 * 根据企业ID和名称查询或创建二维码
 * @param corpid 企业ID
 * @param name 二维码名称（必须为大写字母或下划线）
 * @returns 二维码信息
 */
export const getOrCreateMpQrcodeApi = (corpid: string, name: string) => {
  return http.request<ResponseData<QyMpQrcodeEntity>>("get", `/qywx/mp-qrcodes/get-or-create`, {
    params: { corpid, name }
  });
};

/**
 * 导出二维码Excel
 * @param params 查询参数
 * @param fileName 文件名
 * @returns 下载文件
 */
export const exportMpQrcodeExcelApi = (params: SearchMpQrcodeQuery, fileName: string) => {
  return http.download("/qywx/mp-qrcodes/excel", fileName, { params });
};