import request from '@/utils/request';
import { AxiosPromise } from 'axios';
import { GameEventVO, GameEventForm, GameEventQuery } from '@/api/system/gameEvent/types';

/**
 * 查询赛事基本信息列表
 * @param query
 * @returns {*}
 */

export const listGameEvent = (query?: GameEventQuery): AxiosPromise<GameEventVO[]> => {
  return request({
    url: '/system/gameEvent/list',
    method: 'get',
    params: query
  });
};

/**
 * 更新赛事微信小程序码
 * 重新生成赛事的小程序码
 */
export const updateGameEventWxCode = (eventId: string | number) => {
  return request({
    url: '/system/gameEvent/updateQrCode/' + eventId,
    method: 'put'
  });
};

/**
 * 查询赛事基本信息详细
 * @param eventId
 */
export const getGameEvent = (eventId: string | number): AxiosPromise<GameEventVO> => {
  return request({
    url: '/system/gameEvent/' + eventId,
    method: 'get'
  });
};

/**
 * 新增赛事基本信息
 * @param data
 */
export const addGameEvent = (data: GameEventForm) => {
  return request({
    url: '/system/gameEvent',
    method: 'post',
    data: data
  });
};

/**
 * 修改赛事基本信息
 * @param data
 */
export const updateGameEvent = (data: GameEventForm) => {
  return request({
    url: '/system/gameEvent',
    method: 'put',
    data: data
  });
};

/**
 * 删除赛事基本信息
 * @param eventId
 */
export const delGameEvent = (eventId: string | number | Array<string | number>) => {
  return request({
    url: '/system/gameEvent/' + eventId,
    method: 'delete'
  });
};

/**
 * 查询赛事名称和id的map
 * @param query
 * @returns {*}
 */

export const getEventIdNameMap = () => {
  return request({
    url: '/system/gameEvent/map',
    method: 'get'
  });
};

/**
 * 获取默认赛事信息
 */
export function getDefaultEvent() {
  return request({
    url: '/system/gameEvent/default',
    method: 'get'
  });
}

/**
 * 修改赛事为默认赛事
 * @param eventId
 */
export function changeEventDefault(eventId: string | number, isDefault: string) {
  const data = {
    eventId,
    isDefault
    // eventName
  };
  return request({
    url: '/system/gameEvent/changeEventDefault',
    method: 'put',
    data: data
  });
}

/**
 * 查询赛事数量
 * @returns {*}
 */

export const getEventCount = (type: number) => {
  return request({
    url: '/system/gameEvent/count/' + type,
    method: 'get'
  });
};

/**
 * 生成号码对照表
 * @param query
 * @returns {*}
 */

export const generateNumberTable = () => {
  return request({
    url: '/system/number/generateTable',
    method: 'get'
  });
};

/**
 * 生成号码布（直接下载 ZIP）
 *
 * @param bgImage - 背景图文件 (File)
 * @param logo - Logo 文件 (File, 可选)
 * @param bibParam - 布局参数
 * @returns {AxiosPromise} 返回 Promise，但实际不解析数据，用于触发下载
 */
export const generateBib = (bgImage: File, logo: File | null, bibParam: GenerateBibBo): AxiosPromise<void> => {
  const formData = new FormData();

  // 添加文件
  formData.append('bgImage', bgImage);
  if (logo) {
    formData.append('logo', logo);
  }

  // 添加 bibParam 对象（作为 Blob 以确保正确的 MIME 类型）
  formData.append(
    'bibParam',
    new Blob([JSON.stringify(bibParam)], {
      type: 'application/json'
    })
  );

  // 同时也添加单独的参数作为备选方案（如果后端需要）
  if (bibParam.logoX !== undefined) {
    formData.append('logoX', bibParam.logoX.toString());
  }
  if (bibParam.logoY !== undefined) {
    formData.append('logoY', bibParam.logoY.toString());
  }
  if (bibParam.qRCodeX !== undefined) {
    formData.append('qRCodeX', bibParam.qRCodeX.toString());
  }
  if (bibParam.qRCodeY !== undefined) {
    formData.append('qRCodeY', bibParam.qRCodeY.toString());
  }
  if (bibParam.fontName) {
    formData.append('fontName', bibParam.fontName);
  }
  if (bibParam.fontSize !== undefined) {
    formData.append('fontSize', bibParam.fontSize.toString());
  }
  if (bibParam.fontColor !== undefined) {
    formData.append('fontColor', bibParam.fontColor.toString());
  }
  if (bibParam.eventName !== undefined) {
    formData.append('eventName', bibParam.eventName);
  }
  // console.log('formData', [...formData.entries()]);
  return request({
    url: '/system/number/generateBib',
    method: 'post',
    data: formData,
    headers: {
      'repeatSubmit': false
      // 'Content-Type': 'multipart/form-data'
    },
    // 必须设置 responseType 为 'blob' 才能触发文件下载
    responseType: 'blob',
    // 增加超时时间到5分钟，避免大文件生成超时
    timeout: 3600000
  });
};

// -------------------------------
// 类型定义（放在 types.ts 中）
// -------------------------------

export interface GenerateBibBo {
  logoX?: number; // Logo X 坐标
  logoY?: number; // Logo Y 坐标
  qRCodeX?: number; // 二维码 X 坐标
  qRCodeY?: number; // 二维码 Y 坐标
  fontName?: string; // 字体名称，如 "simhei"
  fontSize?: number; // 字体大小
  fontColor?: number; // 字体颜色，如 0xFF0000 (红色)
  eventName?: string;// 赛事名称
}
