package com.sdtool.common.api;

import com.sdtool.common.entity.base.DataBaseMultiItemEx;
import com.sdtool.common.entity.doc.BusinessScript;
import com.sdtool.common.entity.system.KeyValuePair;
import com.sweetfish.service.Local;
import com.sweetfish.util.AutoLoad;
import org.rex.RMap;

import java.util.List;

/**
 * Created by 81460 on 2020-03-28
 *
 * @author 81460
 */

@Local
@AutoLoad(false)
public interface SupplierInitService extends ScriptService {

    List<String> redisListGetAndDel(String key, int range);

    void addSupplier(DataBaseMultiItemEx dataItem);

    /**
     * 增加商户
     *
     * @param dataSourceId    数据库id
     * @param supplierCode    商户code，对应商户id即可
     * @param supplierType    商户类别,如印刷厂,外协厂等
     * @param driverClassName 数据库连接驱动名称
     * @param dataConnStr     数据库连接字符串
     * @param userName        数据库登录账号
     * @param password        数据库密码
     * @return 操作信息
     */
    @SuppressWarnings({"rawtypes"})
    RMap addSupplier(String dataSourceId, String supplierCode, int supplierType,
                     String driverClassName, String dataConnStr,
                     String userName, String password);

    /**
     * 获取某个supplier对应的es全部索引
     *
     * @param supplierCode 分表
     * @param esKey        key
     * @return key
     */
    String[] getDateYearESIndexArray(long supplierCode, String esKey);

    /**
     * 获取某个supplier对应的es全部索引
     *
     * @param supplierCode 分表
     * @param esKey        key
     * @return key
     */
    String getDateYearESIndex(long supplierCode, String esKey, int dataYear);

    /**
     * 获取账套列表，维护使用
     *
     * @return KeyValuePair的key为dataSourceId，value为supplierCode
     */
    List<KeyValuePair> getDataBaseItemList();

    /**
     * 从supplierCode获取数据源
     * 分表一般是唯一的
     *
     * @param supplierCode 分表
     * @return dataSourceId
     */
    String getDataSourceIdFromSupplierCode(long supplierCode);

    void addBusinessScriptLocal(BusinessScript businessScript, String dataSourceId, long supplierCode);

    /**
     * 获取下载根地址
     *
     * @param dataSourceId 分库
     * @param supplierCode 分表
     * @return 下载根目录地址
     */
    @Deprecated
    String getDownloadRootUrl(String dataSourceId, long supplierCode);

    @Deprecated
    String getWebDownloadRootUrl(String dataSourceId, long supplierCode);

    /**
     * 获取文件内网下载地址
     * 由于直接存入拼接好的下载地址不利于后期修改地址，而且存储字段过长，改为实时获取下载地址
     *
     * @param bucketFileName 文件名，包含目录，比如 productImage/abc.jpg
     * @param srcFileName    原文件名，比如订单的文件名，用于下载文件时可以更方便的命名
     * @param dataSourceId   分库
     * @param supplierCode   分表
     * @return 下载地址
     */
    String getFileDownloadUrl(String bucketFileName, String srcFileName, String dataSourceId, long supplierCode);

    /**
     * 获取文件外网下载地址
     * 由于直接存入拼接好的下载地址不利于后期修改地址，而且存储字段过长，改为实时获取下载地址
     *
     * @param bucketFileName 文件名，包含目录，比如 productImage/abc.jpg
     * @param srcFileName    原文件名，比如订单的文件名，用于下载文件时可以更方便的命名
     * @param dataSourceId   分库
     * @param supplierCode   分表
     * @return 下载地址
     */
    String getFileWebDownloadUrl(String bucketFileName, String srcFileName, String dataSourceId, long supplierCode);

    /**
     * 获取订单文件内网下载地址
     *
     * @param bucketFileName 文件名，包含目录，比如 productImage/abc.jpg
     * @param dataSourceId   分库
     * @param supplierCode   分表
     * @return 下载地址
     */
    String getOrderFileDownloadUrl(String bucketFileName, String dataSourceId, long supplierCode);

    /**
     * 获取订单文件外网下载地址
     *
     * @param bucketFileName 文件名，包含目录，比如 productImage/abc.jpg
     * @param dataSourceId   分库
     * @param supplierCode   分表
     * @return 下载地址
     */
    String getOrderFileWebDownloadUrl(String bucketFileName, String dataSourceId, long supplierCode);

    String getRunEnvironment();
}
