import request from '@/axios';

// ==================== 武术赛事活动日程管理接口 ====================

/**
 * 活动日程分页查询
 * @param {Number} current - 当前页,默认1
 * @param {Number} size - 每页条数,默认10
 * @param {Object} params - 查询参数
 * @param {Number} params.competitionId - 赛事ID
 */
export const getActivityScheduleList = (current, size, params) => {
  return request({
    url: '/martial/activitySchedule/list',
    method: 'get',
    params: {
      current,
      size,
      ...params
    }
  })
}

/**
 * 获取活动日程详情
 * @param {Number} id - 活动日程ID
 */
export const getActivityScheduleDetail = (id) => {
  return request({
    url: '/martial/activitySchedule/detail',
    method: 'get',
    params: { id }
  })
}

/**
 * 新增或修改活动日程
 * @param {Object} data - 活动日程数据
 * @param {String} data.competitionId - 赛事ID
 * @param {String} data.scheduleDate - 日程日期
 * @param {String} data.scheduleTime - 日程时间
 * @param {String} data.eventName - 活动项目
 * @param {String} data.venue - 地点
 * @param {String} data.description - 描述
 * @param {String} data.remark - 备注
 * @param {Number} data.sortOrder - 排序
 */
export const submitActivitySchedule = (data) => {
  return request({
    url: '/martial/activitySchedule/submit',
    method: 'post',
    data
  })
}

/**
 * 删除活动日程
 * @param {String} ids - 活动日程ID,多个用逗号分隔
 */
export const removeActivitySchedule = (ids) => {
  return request({
    url: '/martial/activitySchedule/remove',
    method: 'post',
    params: { ids }
  })
}

// ==================== 赛程编排接口 ====================

/**
 * 获取赛程编排结果
 * @param {Number} competitionId - 赛事ID
 */
export const getScheduleResult = (competitionId) => {
  return request({
    url: '/martial/schedule/result',
    method: 'get',
    params: { competitionId },
    timeout: 30000 // 设置30秒超时,因为编排数据较大
  })
}

/**
 * 保存并锁定赛程编排
 * @param {Number} competitionId - 赛事ID
 */
export const saveAndLockSchedule = (competitionId) => {
  return request({
    url: '/martial/schedule/save-and-lock',
    method: 'post',
    data: { competitionId },
    timeout: 60000 // 设置60秒超时,因为锁定操作可能耗时较长
  })
}

/**
 * 保存编排草稿
 * @param {Object} data - 编排草稿数据
 * @param {Number} data.competitionId - 赛事ID
 * @param {Boolean} data.isDraft - 是否为草稿
 * @param {Array} data.competitionGroups - 竞赛分组数据
 */
export const saveDraftSchedule = (data) => {
  return request({
    url: '/martial/schedule/save-draft',
    method: 'post',
    data,
    timeout: 60000 // 设置60秒超时,因为保存草稿可能涉及大量数据
  })
}

/**
 * 触发自动编排
 * @param {Number} competitionId - 赛事ID
 */
export const triggerAutoArrange = (competitionId) => {
  return request({
    url: '/martial/schedule/auto-arrange',
    method: 'post',
    data: { competitionId },
    timeout: 60000 // 设置60秒超时,因为自动编排可能耗时较长
  })
}

/**
 * 移动赛程分组到指定场地和时间段
 * @param {Object} data - 移动请求数据
 * @param {Number} data.groupId - 分组ID
 * @param {Number} data.targetVenueId - 目标场地ID
 * @param {Number} data.targetTimeSlotIndex - 目标时间段索引
 */
export const moveScheduleGroup = (data) => {
  return request({
    url: '/martial/schedule/move-group',
    method: 'post',
    data
  })
}

// ==================== 调度功能接口 ====================

/**
 * 获取调度数据
 * @param {Object} params - 查询参数
 * @param {Number} params.competitionId - 赛事ID
 * @param {Number} params.venueId - 场地ID
 * @param {Number} params.timeSlotIndex - 时间段索引
 */
export const getDispatchData = (params) => {
  return request({
    url: '/martial/schedule/dispatch-data',
    method: 'get',
    params
  })
}

/**
 * 调整出场顺序
 * @param {Object} data - 调整请求数据
 * @param {Number} data.detailId - 编排明细ID
 * @param {Number} data.participantId - 参赛者记录ID
 * @param {String} data.action - 调整动作(move_up/move_down/swap)
 * @param {Number} data.targetOrder - 目标顺序（交换时使用）
 */
export const adjustOrder = (data) => {
  return request({
    url: '/martial/schedule/adjust-order',
    method: 'post',
    data
  })
}

/**
 * 批量保存调度
 * @param {Object} data - 保存调度数据
 * @param {Number} data.competitionId - 赛事ID
 * @param {Array} data.adjustments - 调整列表
 */
export const saveDispatch = (data) => {
  return request({
    url: '/martial/schedule/save-dispatch',
    method: 'post',
    data
  })
}

/**
 * 导出赛程表
 * @param {Number} competitionId - 赛事ID
 */
export const exportSchedule = (competitionId) => {
  return request({
    url: '/martial/export/schedule',
    method: 'get',
    params: { competitionId },
    responseType: 'blob'
  })
}
