package com.blueland.common.core.service;


import com.blueland.common.core.domain.International;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * 国际化 服务层。
 *
 * @author mybatis-flex-helper automatic generation
 * @since 1.0
 */
public interface InternationalService extends IService<International> {

    /**
     * 插入
     *
     * @param international 国际
     * @return boolean
     */
    boolean insert(International international);

    /**
     * 是否存在
     *
     * @param code 编码
     * @param lang 语言
     * @return boolean
     */
    boolean exist(String code, String lang);

    /**
     * @return {@link List}<{@link International}>
     */
    List<International> listAll(International international);

    /**
     * 根据语言查询
     *
     * @param lang     语言
     * @param tenantId
     * @return {@link List}<{@link International}>
     */
    List<International> listByLang(String lang, String tenantId,String type);

    /**
     * @param international
     * @return {@link List}<{@link International}>
     */
    Page<List<International>> pageList(International international);

    /**
     * 一键复制
     *
     * @param targetLang 目标语言
     * @param sourceLang 源语言
     * @param tenantId
     * @return boolean
     */
    boolean copy(String targetLang, String sourceLang, String tenantId);


    /**
     * 更新
     *
     * @param international
     * @return boolean
     */
    boolean updateInternational(International international);

    /**
     * 根据id删除
     *
     * @param id
     * @return
     */
    boolean deleteById(String id);


    /**
     * 下载模板
     */
    void dowloadTemplate();


    /**
     * 导入数据
     *
     * @param file
     * @return {@link Boolean}
     */
    Boolean importList(MultipartFile file);

    /**
     * 返回对应的语言包
     * @return
     */
    Map<String, Map<String, String>> findLangPackage(String type);

    /**
     * 租户ID副本
     *
     * @param sourceLang 源语言
     * @param tenantId   保持ID
     * @return {@link Boolean}
     */
    Boolean tenantIdCopy(String sourceLang, String tenantId);

}