// HTTP请求参数验证工具

/**
 * 验证必需参数
 * @param {Object} params 参数对象
 * @param {Array} requiredFields 必需字段数组
 * @param {String} apiName API名称（用于错误提示）
 * @throws {Error} 参数验证失败时抛出错误
 */
export function validateRequired(params, requiredFields, apiName = 'API') {
	if (!params || typeof params !== 'object') {
		throw new Error(`${apiName}: 参数不能为空`)
	}
	
	for (const field of requiredFields) {
		if (params[field] === undefined || params[field] === null || params[field] === '') {
			throw new Error(`${apiName}: 缺少必需参数 ${field}`)
		}
	}
}

/**
 * 验证ID参数
 * @param {String|Number} id ID值
 * @param {String} fieldName 字段名称
 * @param {String} apiName API名称
 * @throws {Error} ID验证失败时抛出错误
 */
export function validateId(id, fieldName = 'id', apiName = 'API') {
	if (!id || (typeof id !== 'string' && typeof id !== 'number')) {
		throw new Error(`${apiName}: ${fieldName} 不能为空且必须是字符串或数字`)
	}
	
	if (typeof id === 'string' && id.trim() === '') {
		throw new Error(`${apiName}: ${fieldName} 不能为空字符串`)
	}
	
	if (typeof id === 'number' && (id <= 0 || !Number.isInteger(id))) {
		throw new Error(`${apiName}: ${fieldName} 必须是正整数`)
	}
}

/**
 * 验证分页参数
 * @param {Object} params 分页参数
 * @param {String} apiName API名称
 */
export function validatePagination(params, apiName = 'API') {
	if (params.page !== undefined) {
		if (!Number.isInteger(params.page) || params.page < 1) {
			throw new Error(`${apiName}: page 必须是大于0的整数`)
		}
	}
	
	if (params.limit !== undefined) {
		if (!Number.isInteger(params.limit) || params.limit < 1 || params.limit > 100) {
			throw new Error(`${apiName}: limit 必须是1-100之间的整数`)
		}
	}
}

/**
 * 验证文件上传参数
 * @param {Object} fileData 文件数据
 * @param {String} apiName API名称
 */
export function validateFileUpload(fileData, apiName = 'API') {
	if (!fileData || typeof fileData !== 'object') {
		throw new Error(`${apiName}: 文件数据不能为空`)
	}
	
	if (!fileData.filePath || typeof fileData.filePath !== 'string') {
		throw new Error(`${apiName}: filePath 不能为空且必须是字符串`)
	}
	
	// 验证文件路径格式（简单验证）
	if (!fileData.filePath.includes('/') && !fileData.filePath.includes('\\')) {
		throw new Error(`${apiName}: filePath 格式不正确`)
	}
}
