package com.hzs.system.base.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.hzs.common.core.enums.ELanguages;
import com.hzs.common.domain.system.base.BdTransaction;
import com.hzs.common.domain.system.base.ext.TransactionParam;
import com.hzs.common.domain.system.base.ext.TransactionResult;

import java.util.*;

/**
 * 统一翻译表 服务类
 *
 * @author hzs
 * @since 2022-08-08
 */
public interface IBdTransactionService extends IService<BdTransaction> {

    /**
     * 导入统一翻译信息
     *
     * @param transactionList
     * @param updateSupport
     * @param userId
     * @return
     */
    boolean importData(List<BdTransaction> transactionList, boolean updateSupport, Long userId);

    /**
     * 插入国际化内容（并异步处理其它翻译）
     *
     * @param transactionParam
     * @return
     */
    Integer insertTransactionExt(TransactionParam transactionParam);

    /**
     * 更新国际化内容
     *
     * @param transactionParam 更新参数
     * @param updateOther      是否更新其它语种
     * @return
     */
    Integer updateTransactionExt(TransactionParam transactionParam, Boolean updateOther);

    /**
     * 初始化单条国际化内容
     *
     * @param bdTransaction
     * @return
     */
    Integer initTransaction(BdTransaction bdTransaction);

    /**
     * 查询国际化指定内容
     *
     * @param content 翻译内容
     * @param from    来源字段
     * @param to      返回字段
     * @return
     */
    String queryTransactionContent(String content, String from, String to);

    /**
     * 查询国际化指定内容列表
     *
     * @param contentList 翻译内容列表
     * @param from        来源字段
     * @param to          返回字段
     * @return
     */
    List<TransactionResult> queryTransactionContentList(Set<String> contentList, String from, String to);

    /**
     * 查询国际化指定KEY列表
     *
     * @param key 翻译KEY
     * @param to  返回字段
     * @return
     */
    TransactionResult queryTransactionKey(String key, String to);

    /**
     * 查询国际化指定KEY模糊查询
     *
     * @param keyPrefixList 翻译KEY前缀列表
     * @param to            返回字段
     * @return
     */
    List<TransactionResult> queryTransactionListByKeyPrefix(Set<String> keyPrefixList, String to);

    /**
     * 查询国际化指定pkId查询
     *
     * @param pkIdList 翻译ID列表
     * @param to       返回字段
     * @return
     */
    List<TransactionResult> queryTransactionListByPkId(Collection<Integer> pkIdList, String to);

    /**
     * 查询列表（可指定列）
     *
     * @param column   指定语言列
     * @param isCache  是否缓存（true=是，false=否）
     * @param isUpload 是否上传OSS（true=是，false=否）
     * @return
     */
    List<BdTransaction> queryListByColumn(String column, boolean isCache, boolean isUpload);

    /**
     * 初始化指定语种
     *
     * @param eLanguages 指定语种
     * @return
     */
    boolean initToLanguage(ELanguages eLanguages);

    /**
     * 以指定语种为基础初始数据资源
     *
     * @param eLanguages 指定语种
     * @param pkIdList   翻译数据ID列表
     * @return
     */
    boolean initOtherLanguage(ELanguages eLanguages, List<Long> pkIdList);

    /**
     * 刷新资源
     *
     * @param languages 语种
     * @param isCache   是否刷新缓存
     * @param isOss     是否上传OSS
     */
    void flushResources(Integer languages, boolean isCache, boolean isOss);

    /**
     * 更新翻译资源
     *
     * @param dataMap 翻译数据（key：语言， value：翻译内容）
     * @param isCache 是否刷新缓存
     * @param isOss   是否上传oss
     */
    void flushResourcesAll(Map<String, TreeMap<String, String>> dataMap, boolean isCache, boolean isOss);

}
