package com.fs.company.service;

import com.fs.common.core.domain.R;
import com.fs.company.domain.CompanyConfig;
import com.fs.company.param.SaveCompanyMiniAppParam;
import com.fs.company.param.UpdateMiniAppMasterServerParam;
import com.fs.company.vo.CompanyMiniAppVO;

import java.util.List;

/**
 * 参数配置Service接口
 *
 * @author fs
 * @date 2021-05-25
 */
public interface ICompanyConfigService
{
    /**
     * 查询参数配置
     *
     * @param configId 参数配置ID
     * @return 参数配置
     */
    public CompanyConfig selectCompanyConfigById(Integer configId);

    /**
     * 查询参数配置列表
     *
     * @param companyConfig 参数配置
     * @return 参数配置集合
     */
    public List<CompanyConfig> selectCompanyConfigList(CompanyConfig companyConfig);

    /**
     * 新增参数配置
     *
     * @param companyConfig 参数配置
     * @return 结果
     */
    public int insertCompanyConfig(CompanyConfig companyConfig);

    /**
     * 修改参数配置
     *
     * @param companyConfig 参数配置
     * @return 结果
     */
    public int updateCompanyConfig(CompanyConfig companyConfig);

    /**
     * 批量删除参数配置
     *
     * @param configIds 需要删除的参数配置ID
     * @return 结果
     */
    public int deleteCompanyConfigByIds(Integer[] configIds);

    /**
     * 删除参数配置信息
     *
     * @param configId 参数配置ID
     * @return 结果
     */
    public int deleteCompanyConfigById(Integer configId);

    CompanyConfig selectCompanyConfigByKey(Long companyId, String key);

    String selectCompanyConfigByKey(String key);

    String selectConfigByKey(String configKey);

    CompanyConfig selectCompanyConfigByServerKey(String key);

    String selectRedPacketConfigByKey(Long companyId);

    /**
     * 获取公司可配置小程序列表（原有接口，给销售等场景使用，保持原行为）
     * @param companyId
     * @return
     */
    List<CompanyMiniAppVO> getCompanyMiniAppList(Long companyId);

    /**
     * 获取当前公司在 fs_course_play_source_config 中可关联的小程序列表
     * 匹配条件：company_id = 当前公司，或 company_ids 逗号分隔中包含当前公司；is_del = 0
     * 不包含小程序状态为 2（封禁）的记录；status 为空时仍展示
     * @param companyId
     * @return
     */
    List<CompanyMiniAppVO> getCompanyMiniAppListByCompany(Long companyId);

    SaveCompanyMiniAppParam getCurrentCompanyMiniApp(Long companyId);
    /**
     * 公司编辑保存主备小程序数据
     * @param param
     * @return
     */
    R saveCompanyMiniApp(SaveCompanyMiniAppParam param);

    /**
     * 更新当前公司 miniAppConfig 中的主备小程序（miniAppMaster、miniAppServer）
     * 仅允许修改本公司配置，companyId 必须为登录用户所属公司
     *
     * @param companyId 公司ID（必须为当前登录用户公司ID）
     * @param param     主备小程序列表
     * @return
     */
    R updateMiniAppMasterServer(Long companyId, UpdateMiniAppMasterServerParam param);
}
