import http from './request'
/**
 * 智库信息相关的API接口
 * 假设您有一个名为 'http' 的对象来处理请求，且已在 http 封装中处理了 token。
 * 例如：
 * import http from '@/utils/request';
 */

// --- 智库信息接口 ---
/**
 * @description 根据智库ID获取智库基本信息
 * @param {object} params - 请求参数
 * @param {number|string} params.id - 智库id (路径参数, 必须)
 * @returns {Promise<object>} 响应数据，data字段类型为 ThinkTankBasicInfoVO
 * @returns {string} data.country - 国家
 * @returns {string} data.foundingDate - 成立时间
 * @returns {string} data.position - 位置
 * @returns {string} data.nature - 机构性质
 * @returns {number} data.memnum - 成员数
 * @returns {number} data.budget - 年度预算
 */
export const getThinkTankBasicInfo = (params) => {
  // 假设 http 封装中会自动处理 token
  return http.get(`/thinkTankInfo/basic/${params.id}`);
}

/**
* @description 根据智库ID获取分支机构信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankBranchVO>
* @returns {Array<object>} data[] - 分支机构列表
* @returns {string} data[].city - 城市
* @returns {string} data[].area - 区域
* @returns {boolean} data[].hq - 是否总部
*/
export const getThinkTankBranchInfo = (params) => {
  return http.get(`/thinkTankInfo/branch/${params.id}`);
}

/**
* @description 根据智库ID获取经费来源
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankFundsSourceVO>
* @returns {Array<object>} data[] - 经费来源列表
* @returns {number} data[].amount - 金额
* @returns {string} data[].institution - 机构
* @returns {number} data[].percent - 占比
*/
export const getThinkTankFundsSource = (params) => {
  return http.get(`/thinkTankInfo/fundsSource/${params.id}`);
}

/**
* @description 根据智库ID获取经费统计
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段类型为 ThinkTankFundsTotalVO
* @returns {number} data.totalJe - 总金额
* @returns {number} data.zfJe - 政府资金
* @returns {number} data.otherJe - 非政府资金
*/
export const getThinkTankFundsTotal = (params) => {
  return http.get(`/thinkTankInfo/fundsTotal/${params.id}`);
}

/**
* @description 根据智库ID获取成员列表
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankPersonVO>
* @returns {Array<object>} data[] - 成员列表
* @returns {string} data[].name - 姓名
* @returns {string} data[].describe - 描述
*/
export const getThinkTankPersonList = (params) => {
  return http.get(`/thinkTankInfo/person/${params.id}`);
}

/**
* @description 根据智库ID获取政策情况
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @param {Array<string>} [params.researchTypeIds] - 研究类型ID列表 (Query参数)
* @returns {Promise<object>} 响应数据，data字段类型为 ThinkTankPolicyCountVO
* @returns {Array<object>} data.statusVoList[] - 状态列表
* @returns {string} data.statusVoList[].statusName - 状态名称
* @returns {number} data.statusVoList[].statusNum - 状态数量
* @returns {Array<object>} data.policyVoList[] - 政策列表
* @returns {string} data.policyVoList[].content - 政策内容
* @returns {string} data.policyVoList[].status - 政策状态
* @returns {number} data.policyVoList[].reportId - 报告id
* @returns {string} data.policyVoList[].name - 报告名称
* @returns {string} data.policyVoList[].times - 报告时间 (date格式)
*/
export const getThinkTankPolicyInfo = (params) => {
  const { id, ...queryParams } = params;
  // 假设 http.get 会将 queryParams 作为查询参数传递
  return http.get(`/thinkTankInfo/policy/${id}`, { params: queryParams });
}

/**
* @description 获取智库报告类型列表
* @returns {Promise<object>} 响应数据，data字段为数组 List<DThinkTankReportType>
* @returns {Array<object>} data[] - 报告类型列表
* @returns {number} data[].id - 主键
* @returns {string} data[].typeId - 报告类型id
* @returns {string} data[].typeName - 报告类型
*/
export const getThinkTankReportTypeList = () => {
  return http.get('/thinkTankInfo/reportType');
}

/**
* @description 根据智库ID获取研究领域情况
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankResearchAreaVO>
* @returns {Array<object>} data[] - 研究领域列表
* @returns {string} data[].describe - 研究领域描述
* @returns {string} data[].time - 研究时间范围
*/
export const getThinkTankResearchArea = (params) => {
  return http.get(`/thinkTankInfo/researchArea/${params.id}`);
}

// /thinkTankInfo/report/{id}
export const getThinkTankReport = (params) => {
  return http.get(`/thinkTankInfo/report/${params.id}`);
}

/**
* @description 根据智库ID获取智库全局信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 智库id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段类型为 ThinkTankInfoVO
* @returns {string} data.name - 智库名称
* @returns {string} data.describe - 智库描述
* @returns {string} data.ename - 智库英文名
* @returns {string} data.url - 智库网址
* @returns {Array<string>} data.tags[] - 智库标签列表
*/
export const getThinkTankSummary = (params) => {
  return http.get(`/thinkTankInfo/summary/${params.id}`);
}

// --- 智库报告接口 ---

/**
* @description 根据报告ID获取报告内容
* @param {object} params - 请求参数
* @param {number|string} params.id - 报告id (路径参数, 必须)
* @param {number} [params.currentPage] - 当前页码 (Query参数)
* @param {number} [params.pageSize] - 分页大小 (Query参数)
* @returns {Promise<object>} 响应数据，data字段类型为 Page<ThinkTankReportContentVO> (分页内容对象)
*/
export const getThinkTankReportContent = (params) => {
  const { id, ...queryParams } = params;
  return http.get(`/thinkTankReport/content/${id}`, { params: queryParams });
}

/**
* @description 根据报告ID获取政策情况
* @param {object} params - 请求参数
* @param {number|string} params.id - 报告id (路径参数, 必须)
* @param {Array<string>} [params.statusList] - 政策状态ID列表 (Query参数)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankReportPolicyVO>
* @returns {Array<object>} data[] - 政策列表
* @returns {string} data[].content - 政策内容
* @returns {string} data[].status - 政策状态
*/
export const getThinkTankReportPolicy = (params) => {
  const { id, ...queryParams } = params;
  return http.get(`/thinkTankReport/policy/${id}`, { params: queryParams });
}

/**
* @description 根据报告ID获取报告全局信息
* @param {object} params - 请求参数
* @param {number|string} params.id - 报告id (路径参数, 必须)
* @returns {Promise<object>} 响应数据，data字段类型为 ThinkTankReportDetailVO
* @returns {string} data.name - 报告名称
* @returns {string} data.times - 报告时间 (date格式)
* @returns {string} data.ename - 报告英文名称
* @returns {string} data.summary - 报告摘要
* @returns {string} data.thinkTankName - 智库名称
* @returns {Array<string>} data.tags[] - 报告标签列表
* @returns {Array<string>} data.researchTypes[] - 报告研究类型列表
*/
export const getThinkTankReportSummary = (params) => {
  return http.get(`/thinkTankReport/summary/${params.id}`);
}

// --- 智库概览接口 ---

/**
* @description 获取概览智库政策
* @param {object} [params] - 请求参数
* @param {Array<string>} [params.researchTypeIds] - 研究类型ID列表 (Query参数)
* @param {Array<string>} [params.statusList] - 政策状态ID列表 (Query参数)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankPolicyVO>
* @returns {Array<object>} data[] - 政策列表
* @returns {string} data[].content - 政策内容
* @returns {string} data[].status - 政策状态
* @returns {number} data[].reportId - 报告id
* @returns {string} data[].name - 报告名称
* @returns {string} data[].times - 报告时间 (date格式)
*/
export const getOverviewPolicy = (params = {}) => {
  // 假设 http.get 会将 params 作为查询参数传递
  return http.get('/thinkTankOverview/policy', { params });
}

/**
* @description 获取概览智库报告
* @param {object} [params] - 请求参数
* @param {Array<string>} [params.areas] - 区域名称列表 (Query参数)
* @param {Array<string>} [params.researchTypeIds] - 研究类型ID列表 (Query参数)
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankSummaryReportVO>
* @returns {Array<object>} data[] - 报告列表
* @returns {number} data[].id - 报告id
* @returns {string} data[].name - 报告名称
* @returns {string} data[].times - 报告时间 (date格式)
* @returns {string} data[].thinkTankName - 智库名称
*/
export const getOverviewReport = (params = {}) => {
  return http.get('/thinkTankOverview/report', { params });
}

/**
* @description 获取智库列表
* @returns {Promise<object>} 响应数据，data字段为数组 List<ThinkTankListVO>
* @returns {Array<object>} data[] - 智库列表
* @returns {number} data[].id - 智库id
* @returns {string} data[].name - 智库名称
* @returns {string} data[].describe - 智库描述
* @returns {string} data[].country - 智库国家
* @returns {Array<string>} data[].tags[] - 智库标签列表
*/
export const getThinkTankList = () => {
  return http.get('/thinkTankOverview/thinkTanks');
}


// 获取智库报告研究类型 /thinkTankInfo/researchType
export const getThinkTankResearchType = () => {
  return http.get('/thinkTankInfo/researchType');
}

