package com.czg.system.service;

import com.czg.exception.CzgException;
import com.czg.resp.CzgResult;
import com.czg.system.dto.SysParamsDTO;
import com.czg.system.entity.SysParams;
import com.mybatisflex.core.service.IService;

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

/**
 * 服务层。
 *
 * @author mac
 * @since 2025-02-07
 */
public interface SysParamsService extends IService<SysParams> {


    /**
     * 根据参数类型获取参数
     *
     * @param type 参数类型
     * @return 参数列表
     */
    CzgResult<List<SysParamsDTO>> getParamsByType(Integer type);

    /**
     * 新增参数
     *
     * @param paramsDTO 参数
     * @return 新增结果
     */
    CzgResult<String> insertParams(SysParamsDTO paramsDTO);

    /**
     * 修改参数
     *
     * @param paramsDTO 参数
     * @return 修改结果
     */
    CzgResult<String> updateParams(SysParamsDTO paramsDTO);

    /**
     * 删除参数
     *
     * @param code 参数code
     * @return 删除结果
     */
    CzgResult<Boolean> deleteParams(String code);

    /**
     * 根据参数编码获取参数
     * {@link com.czg.constants.ParamCodeCst}
     *
     * @param code 参数编码
     * @return 参数
     */
    CzgResult<SysParamsDTO> getParamsByCode(String code);

    /**
     * 根据参数编码获取参数值
     * {@link com.czg.constants.ParamCodeCst}
     */
    String getSysParamValue(String code);


    /**
     * 根据参数类型获取参数
     * dubbo 调用需要 显式抛出 异常类型
     *
     * @param type 参数类型
     * @param keyList 内容为 {@link com.czg.constants.ParamCodeCst}的Set集合
     */
    Map<String, String> getParamsByMap(String type, Set<String> keyList) throws CzgException;

    /**
     * 根据参数类型获取参数
     *
     * @param paramType 参数类型
     * @return 参数列表
     */
    List<SysParamsDTO> getByParamType(String paramType) throws CzgException;
}
