package org.xyzh.api.system.service;

import org.xyzh.api.system.vo.SysConfigVO;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageRequest;
import org.xyzh.common.dto.sys.TbSysConfigDTO;

/**
 * @description    系统配置服务接口
 * @filename    SysConfigService.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-11-05
 */
public interface SysConfigService {
    // ==================  读取配置  ========================
    /**
     * 获取字符串类型配置
     * @param key 配置键
     * @return 配置值
     */
    String getStringConfig(String key);
    
    /**
     * 获取整数类型配置
     * @param key 配置键
     * @return 配置值，如果不存在或解析失败返回null
     */
    Integer getIntConfig(String key);
    
    /**
     * 获取布尔类型配置
     * @param key 配置键
     * @return 配置值，如果不存在或解析失败返回null
     */
    Boolean getBooleanConfig(String key);
    
    /**
     * 获取浮点数类型配置
     * @param key 配置键
     * @return 配置值，如果不存在或解析失败返回null
     */
    Double getDoubleConfig(String key);
    
    /**
     * 获取长整数类型配置
     * @param key 配置键
     * @return 配置值，如果不存在或解析失败返回null
     */
    Long getLongConfig(String key);

    // =====================================================
    
    /**
     * @description    插入系统配置
     * @param    configDTO    系统配置DTO
     * @return    ResultDomain<TbSysConfigDTO>    插入结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysConfigDTO> insertConfig(TbSysConfigDTO configDTO);

    /**
     * @description    更新系统配置
     * @param    configDTO    系统配置DTO
     * @return    ResultDomain<TbSysConfigDTO>    更新结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<TbSysConfigDTO> updateConfig(TbSysConfigDTO configDTO);

    /**
     * @description    根据ID删除系统配置
     * @param    configDTO    系统配置DTO
     * @return    ResultDomain<Boolean>    删除结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<Boolean> deleteConfig(TbSysConfigDTO configDTO);

    /**
     * @description    根据ID查询系统配置
     * @param    filter    系统配置VO
     * @return    ResultDomain<SysConfigVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<SysConfigVO> getConfig(SysConfigVO filter);

    /**
     * @description    根据条件查询系统配置列表
     * @param    filter    系统配置VO
     * @return    ResultDomain<SysConfigVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<SysConfigVO> getConfigList(SysConfigVO filter);

    /**
     * @description    根据条件查询系统配置分页列表
     * @param    filter    系统配置VO
     * @return    ResultDomain<SysConfigVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<SysConfigVO> getConfigPage(PageRequest<SysConfigVO> filter);

    /**
     * @description    根据配置键获取配置值
     * @param    key    配置键
     * @return    ResultDomain<String>    配置值
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<String> getConfigValueByKey(String key);

    /**
     * @description    根据模块ID获取配置列表
     * @param    moduleId    模块ID
     * @return    ResultDomain<SysConfigVO>    查询结果
     * @author    yslg
     * @since 2025-11-05
     */
    ResultDomain<SysConfigVO> getConfigListByModuleId(String moduleId);
}
