package com.tofly.base.strategy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * <p>
 * 策略管理 服务实现类
 * </p>
 *
 * @author Zev
 * @since 2021-01-19
 */
@Component
public class ExcelStrategyContext {
    /**
     *使用线程安全的ConcurrentHashMap存储所有实现Strategy接口的Bean
     *key:beanName
     *value：实现Strategy接口Bean
     */
    private final Map<String, ExcelStrategy> strategyMap = new ConcurrentHashMap<>();

    /**
     * 注入所有实现了Strategy接口的Bean
     * @param strategyMap
     */
    @Autowired
    public ExcelStrategyContext(Map<String, ExcelStrategy> strategyMap) {
        this.strategyMap.clear();
        strategyMap.forEach(this.strategyMap::put);
    }


    /**
     *  excel获取导出数据
     *  @param templateServiceType service服务名称
     *  @param templateFlag 0为正式导出/1为演示模板导出
     *  @param dto 筛选条件对象
     *  @return 封装好的导出对象
     *
     */
    public List<Map<String, Object>> getExportData(String templateServiceType,String templateFlag, String dto){
        //在这里要捕捉异常，或者是做相应处理，因为如果找不到service名字
        //会报错，也就是找不到对应的策略
        if(!StringUtils.isEmpty(templateServiceType)){
            return strategyMap.get(templateServiceType).getExportData(dto,templateFlag);
        }
        return null;

    }

    /**
     * excel数据落库
     * @param templateServiceType service服务名称
     * @param dataList 导入数据列表
     * @return 是否成功
     */
    public Boolean excelDataStorage(String templateServiceType,List<Object> dataList) {
        if(!StringUtils.isEmpty(templateServiceType)){
            return strategyMap.get(templateServiceType).excelDataStorage(dataList);
        }
        return null;
    }
}
