package org.hzhub.erp.service;

import org.hzhub.erp.common.page.TableDataInfo;
import org.hzhub.erp.domain.entity.ErpApiConfig;
import org.hzhub.erp.domain.entity.ErpApiParam;
import org.hzhub.erp.domain.vo.ApiTestResultVO;
import org.hzhub.erp.domain.vo.ErpApiConfigVO;

import java.util.List;
import java.util.Map;

/**
 * ERP动态API配置Service接口
 *
 * @author HZHub Team
 */
public interface IErpApiService {

    /**
     * 分页查询API配置列表
     *
     * @param query 查询条件
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 分页结果
     */
    TableDataInfo<ErpApiConfigVO> queryApiConfigList(ErpApiConfigVO query, Integer pageNum, Integer pageSize);

    /**
     * 根据ID查询API配置
     *
     * @param apiId API ID
     * @return API配置
     */
    ErpApiConfig selectApiConfigById(Long apiId);

    /**
     * 根据API ID查询参数列表
     *
     * @param apiId API ID
     * @return 参数列表
     */
    List<ErpApiParam> selectApiParamsByApiId(Long apiId);

    /**
     * 根据路径、方法、版本查询API配置
     *
     * @param apiPath API路径
     * @param apiMethod HTTP方法
     * @param apiVersion API版本
     * @return API配置
     */
    ErpApiConfig selectApiConfigByPath(String apiPath, String apiMethod, String apiVersion);

    /**
     * 新增API配置
     *
     * @param config API配置
     * @return 影响行数
     */
    int insertApiConfig(ErpApiConfig config);

    /**
     * 修改API配置
     *
     * @param config API配置
     * @return 影响行数
     */
    int updateApiConfig(ErpApiConfig config);

    /**
     * 批量删除API配置
     *
     * @param apiIds API ID数组
     * @return 影响行数
     */
    int deleteApiConfigByIds(Long[] apiIds);

    /**
     * 更新API状态
     *
     * @param config API配置（包含apiId和status）
     * @return 影响行数
     */
    int updateApiStatus(ErpApiConfig config);

    /**
     * 从数据库表导入生成API配置
     *
     * @param tableNames 表名数组
     * @param dataSource 数据源名称
     */
    void importFromTable(String[] tableNames, String dataSource);

    /**
     * 同步表结构
     *
     * @param apiId API ID
     */
    void syncTableStructure(Long apiId);

    /**
     * 测试API
     *
     * @param apiId API ID
     * @param testParams 测试参数
     * @param clientIp 客户端IP
     * @param userId 用户ID
     * @return 测试结果
     */
    ApiTestResultVO testApi(Long apiId, Map<String, Object> testParams, String clientIp, String userId);

    /**
     * 生成API文档
     *
     * @param apiId API ID
     * @return 文档内容Map
     */
    Map<String, String> generateApiDoc(Long apiId);

    /**
     * 查询API调用统计
     *
     * @param apiId API ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计信息
     */
    Map<String, Object> getApiStats(Long apiId, String startTime, String endTime);

    /**
     * 查询API错误日志
     *
     * @param apiId API ID
     * @param limit 限制数量
     * @return 错误日志列表
     */
    List<Map<String, Object>> getApiErrorLog(Long apiId, Integer limit);

    /**
     * 清除API缓存
     *
     * @param apiId API ID
     */
    void clearApiCache(Long apiId);
}