import request from '@/axios';

// ==================== 武术赛事赛程计划管理接口 ====================

/**
 * 赛程计划分页查询
 * @param {Number} current - 当前页,默认1
 * @param {Number} size - 每页条数,默认10
 * @param {Object} params - 查询参数
 * @param {Number} params.scheduleId - 赛程ID
 * @param {Number} params.venueId - 场地ID（可选）
 * @param {Number} params.projectId - 项目ID（可选）
 * @param {String} params.planDate - 计划日期（可选）
 */
export const getSchedulePlanList = (current, size, params) => {
  return request({
    url: '/api/blade-martial/schedule-plan/list',
    method: 'get',
    params: {
      current,
      size,
      ...params
    }
  })
}

/**
 * 获取赛程计划详情
 * @param {Number} id - 赛程计划ID
 */
export const getSchedulePlanDetail = (id) => {
  return request({
    url: '/api/blade-martial/schedule-plan/detail',
    method: 'get',
    params: { id }
  })
}

/**
 * 新增赛程计划
 * @param {Object} data - 赛程计划数据
 * @param {Number} data.scheduleId - 赛程ID
 * @param {String} data.planDate - 计划日期
 * @param {String} data.startTime - 开始时间
 * @param {String} data.endTime - 结束时间
 * @param {Number} data.venueId - 场地ID
 * @param {String} data.venueName - 场地名称
 * @param {Number} data.projectId - 项目ID
 * @param {String} data.projectName - 项目名称
 * @param {Number} data.planOrder - 计划顺序
 */
export const addSchedulePlan = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/save',
    method: 'post',
    data
  })
}

/**
 * 修改赛程计划
 * @param {Object} data - 赛程计划数据
 */
export const updateSchedulePlan = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/update',
    method: 'post',
    data
  })
}

/**
 * 删除赛程计划
 * @param {String} ids - 赛程计划ID,多个用逗号分隔
 */
export const removeSchedulePlan = (ids) => {
  return request({
    url: '/api/blade-martial/schedule-plan/remove',
    method: 'post',
    params: { ids }
  })
}

/**
 * 批量添加赛程计划
 * @param {Array} data - 赛程计划数据数组
 */
export const batchAddSchedulePlans = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/batch-save',
    method: 'post',
    data
  })
}

/**
 * 自动编排赛程
 * @param {Object} data - 编排参数
 * @param {Number} data.scheduleId - 赛程ID
 * @param {Number} data.competitionId - 赛事ID
 * @param {String} data.startDate - 开始日期
 * @param {String} data.endDate - 结束日期
 * @param {Array} data.venueIds - 场地ID数组
 * @param {Array} data.projectIds - 项目ID数组
 */
export const autoArrangeSchedule = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/auto-arrange',
    method: 'post',
    data
  })
}

/**
 * 调整赛程计划顺序
 * @param {Object} data - 调整参数
 * @param {Number} data.id - 赛程计划ID
 * @param {Number} data.targetOrder - 目标顺序
 */
export const adjustScheduleOrder = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/adjust-order',
    method: 'post',
    data
  })
}

/**
 * 获取某日期的赛程计划
 * @param {Number} scheduleId - 赛程ID
 * @param {String} planDate - 计划日期
 */
export const getSchedulePlansByDate = (scheduleId, planDate) => {
  return request({
    url: '/api/blade-martial/schedule-plan/list-by-date',
    method: 'get',
    params: { scheduleId, planDate }
  })
}

/**
 * 获取某场地的赛程计划
 * @param {Number} venueId - 场地ID
 * @param {String} planDate - 计划日期（可选）
 */
export const getSchedulePlansByVenue = (venueId, planDate) => {
  return request({
    url: '/api/blade-martial/schedule-plan/list-by-venue',
    method: 'get',
    params: { venueId, planDate }
  })
}

/**
 * 检查时间冲突
 * @param {Object} data - 检查参数
 * @param {Number} data.venueId - 场地ID
 * @param {String} data.planDate - 计划日期
 * @param {String} data.startTime - 开始时间
 * @param {String} data.endTime - 结束时间
 * @param {Number} data.excludeId - 排除的赛程计划ID（编辑时使用）
 */
export const checkTimeConflict = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/check-conflict',
    method: 'post',
    data
  })
}

/**
 * 复制赛程计划到其他日期
 * @param {Object} data - 复制参数
 * @param {Number} data.sourcePlanId - 源赛程计划ID
 * @param {String} data.targetDate - 目标日期
 */
export const copySchedulePlan = (data) => {
  return request({
    url: '/api/blade-martial/schedule-plan/copy',
    method: 'post',
    data
  })
}

/**
 * 导出赛程计划
 * @param {Object} params - 导出参数
 */
export const exportSchedulePlans = (params) => {
  return request({
    url: '/api/blade-martial/schedule-plan/export',
    method: 'get',
    params,
    responseType: 'blob'
  })
}

/**
 * 更新参赛者签到状态
 * @param {Number} participantId - 参赛者ID
 * @param {String} status - 状态：未签到/已签到/异常
 */
export const updateCheckInStatus = (participantId, status) => {
  return request({
    url: '/api/martial/schedule/update-check-in-status',
    method: 'post',
    data: { participantId, status }
  })
}

/**
 * 获取赛程配置
 * @returns {Promise} 返回赛程配置信息
 */
export const getScheduleConfig = () => {
  return request({
    url: '/api/martial/schedule/config',
    method: 'get'
  })
}
