import request from '@/utils/request'

// 合同管理API服务

/**
 * 获取合同列表
 * @param {Object} query - 查询参数
 * @param {string} query.pageNum - 页码
 * @param {string} query.pageSize - 每页数量
 * @param {string} query.status - 合同状态
 * @param {string} query.clientCompany - 甲方单位
 * @param {string} query.securityCompany - 安保公司
 * @param {boolean} query.hasServicePeriod - 是否有完整服务周期
 * @param {boolean} query.hasEmployeeLoanApplication - 是否有员工贷款申请
 * @returns {Promise} API响应
 */
export function listContracts(query) {
  return request({
    url: '/api/credit/contracts',
    method: 'get',
    params: query
  })
}

/**
 * 获取合同详情
 * @param {string} id - 合同ID
 * @returns {Promise} API响应
 */
export function getContract(id) {
  return request({
    url: `/api/credit/contracts/${id}`,
    method: 'get'
  })
}

/**
 * 创建新合同（线上创建模式）
 * @param {Object} data - 合同数据
 * @param {string} data.title - 合同标题
 * @param {string} data.clientCompany - 甲方单位
 * @param {string} data.clientCompanyId - 甲方单位ID
 * @param {string} data.securityCompany - 安保公司
 * @param {string} data.securityCompanyId - 安保公司ID
 * @param {number} data.amount - 合同金额
 * @param {string} data.startDate - 服务开始日期 (YYYY-MM-DD)
 * @param {string} data.endDate - 服务结束日期 (YYYY-MM-DD)
 * @param {string} data.contractType - 合同类型 ('online')
 * @returns {Promise} API响应
 */
export function addContract(data) {
  return request({
    url: '/api/credit/contracts',
    method: 'post',
    data: data
  })
}

/**
 * 更新合同信息
 * @param {Object} data - 合同数据
 * @param {string} data.contractId - 合同ID
 * @returns {Promise} API响应
 */
export function updateContract(data) {
  const contractId = data.contractId;
  if (!contractId) {
    throw new Error('合同ID不能为空');
  }
  
  return request({
    url: `/api/credit/contracts/${contractId}`,
    method: 'put',
    data: data
  })
}

/**
 * 删除合同
 * @param {string} id - 合同ID
 * @returns {Promise} API响应
 */
export function delContract(id) {
  return request({
    url: `/api/credit/contracts/${id}`,
    method: 'delete'
  })
}

/**
 * 上传已签署合同文件（线下上传模式）
 * @param {FormData} formData - 包含文件和合同信息的表单数据
 * @param {string} formData.title - 合同标题
 * @param {string} formData.clientCompanyId - 甲方单位ID
 * @param {string} formData.securityCompanyId - 安保公司ID
 * @param {number} formData.amount - 合同金额
 * @param {string} formData.startDate - 服务开始日期 (YYYY-MM-DD)
 * @param {string} formData.endDate - 服务结束日期 (YYYY-MM-DD)
 * @param {File} formData.contractFile - 合同文件
 * @param {string} formData.contractType - 合同类型 ('upload')
 * @returns {Promise} API响应
 */
export function uploadContract(formData) {
  return request({
    url: '/api/credit/contracts/upload',
    method: 'post',
    data: formData,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 确认合同
 * @param {string} id - 合同ID
 * @param {Object} data - 确认数据
 * @param {string} data.confirmNote - 确认备注
 * @param {string} data.partyType - 确认方类型 (SECURITY_COMPANY/CLIENT_COMPANY)
 * @returns {Promise} API响应
 */
export function confirmContract(id, data) {
  return request({
    url: `/api/credit/contracts/${id}/confirm`,
    method: 'put',
    data: data,
    params: {
      partyType: data.partyType
    }
  })
}

/**
 * 拒绝合同
 * @param {string} id - 合同ID
 * @param {Object} data - 拒绝数据
 * @param {string} data.rejectNote - 拒绝备注
 * @param {string} data.partyType - 确认方类型 (SECURITY_COMPANY/CLIENT_COMPANY)
 * @returns {Promise} API响应
 */
export function rejectContract(id, data) {
  return request({
    url: `/api/credit/contracts/${id}/reject`,
    method: 'put',
    data: data,
    params: {
      partyType: data.partyType
    }
  })
}

/**
 * 获取合同状态统计
 * @returns {Promise} API响应
 */
export function getContractStats() {
  return request({
    url: '/api/credit/contracts/stats',
    method: 'get'
  })
}

/**
 * 验证合同文件并提取信息
 * @param {FormData} formData - 包含文件的表单数据
 * @returns {Promise} API响应
 */
export function validateContractFile(formData) {
  return request({
    url: '/api/credit/contracts/validate-file',
    method: 'post',
    data: formData,
  })
}

/**
 * 导出合同列表
 * @param {Object} query - 查询参数
 * @returns {Promise} API响应
 */
export function exportContract(query) {
  return request({
    url: '/api/credit/contracts/export',
    method: 'get',
    params: query,
    responseType: 'blob'
  })
}