package cn.estsh.i3plus.ext.mes.api.busi.bu3;

import cn.estsh.i3plus.ext.mes.pojo.model.bu3.SxOrgCfgModel;
import cn.estsh.i3plus.ext.mes.pojo.model.bu3.SxProdDataToSoftAdapterCfgModel;
import cn.estsh.i3plus.ext.mes.pojo.model.bu3.SxProdDataToSoftAdapterDataModel;
import cn.estsh.i3plus.pojo.model.softswitch.SuitModel;
import io.swagger.annotations.ApiOperation;
import org.springframework.util.StringUtils;

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

/**
 * 生产数据回传软适配策略接口
 */
public interface ISxProdDataToSoftAdapterStrategyService {

    /**
     * 查询
     * @param data 数据
     * @return 结果
     */
    @ApiOperation(value = "查询", notes = "查询")
    default SxProdDataToSoftAdapterDataModel query(SxProdDataToSoftAdapterDataModel data) { return data; }

    /**
     * 获取配置信息
     * @return 配置信息
     */
    @ApiOperation(value = "获取配置信息", notes = "获取配置信息")
    default SxProdDataToSoftAdapterCfgModel getCfgModel() { return null; }

    /**
     * 获取装饰器实例
     * @return 装饰器实例
     */
    @ApiOperation(value = "获取装饰器实例", notes = "获取装饰器实例")
    default ISxProdDataToSoftAdapterStrategyService getStrategyService() { return null; }

    /**
     * 获取工厂信息
     * @param organizeCode 组织代码
     * @return 工厂信息
     */
    @ApiOperation(value = "获取工厂信息", notes = "获取工厂信息")
    default SxOrgCfgModel getOrganizeName(String organizeCode) { return new SxOrgCfgModel(organizeCode); }

    /**
     * 获取生产线信息
     * @param organizeCode 组织代码
     * @return 生产线信息
     */
    @ApiOperation(value = "获取生产线信息", notes = "获取生产线信息")
    default Map<String, String> getCenterMap(String organizeCode) { return new HashMap<>(); }

    /**
     * 获取生产线系别班别信息
     * @param organizeCode 组织代码
     * @return 生产线系别班别信息
     */
    @ApiOperation(value = "获取生产线系别班别信息", notes = "获取生产线系别班别信息")
    default Map<String, String> getCenterExtMap(String organizeCode) { return new HashMap<>(); }

    /**
     * 获取作业内容信息
     * @param organizeCode 组织代码
     * @return 作业内容信息
     */
    @ApiOperation(value = "获取作业内容信息", notes = "获取作业内容信息")
    default Map<String, String> getShiftProdMap(String organizeCode) { return new HashMap<>(); }

    /**
     * 获取班次信息
     * @param organizeCode 组织代码
     * @return 班次信息
     */
    @ApiOperation(value = "获取班次信息", notes = "获取班次信息")
    default Map<String, String> getShiftMap(String organizeCode) { return new HashMap<>(); }

    /**
     * 获取四舍五入分钟差
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param scale 四舍五入小数位数
     * @return 四舍五入分钟差
     */
    @ApiOperation(value = "获取四舍五入分钟差", notes = "获取四舍五入分钟差")
    default Double getBetweenMin(String startTime, String endTime, int scale) { return new Double(0); }

    /**
     * 值保留4位小数
     * @param value 值
     * @return 4位小数
     */
    default String formatPoint(Double value, String format) { return String.format(StringUtils.isEmpty(format) ? "%.4f" : format, value); }

    /**
     * 执行
     * @param data 数据
     * @return 数据
     */
    @ApiOperation(value = "执行", notes = "执行")
    default Object exec(SxProdDataToSoftAdapterDataModel data) { return data.getObj(); }

    /**
     * 调用SUIT接口
     * @param data 数据
     * @param obj 数据
     * @param cfgModel 配置信息
     */
    @ApiOperation(value = "调用SUIT接口", notes = "调用SUIT接口")
    default SxProdDataToSoftAdapterDataModel doInvokeSuit(SxProdDataToSoftAdapterDataModel data, Object obj, SxProdDataToSoftAdapterCfgModel cfgModel) { return data; }

    /**
     * 创建SUIT对象
     * @param data 数据
     * @param obj 数据
     * @param cfgModel 配置信息
     * @return SUIT对象
     */
    @ApiOperation(value = "创建SUIT对象", notes = "创建SUIT对象")
    default List<SuitModel> instanceSuitList(SxProdDataToSoftAdapterDataModel data, Object obj, SxProdDataToSoftAdapterCfgModel cfgModel) { return null; }

}
