// package com.tzld.piaoquan.ad.engine.service.predict.v2;
//
// import com.alibaba.fastjson.JSONObject;
// import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
// import com.tzld.piaoquan.ad.engine.commons.util.JSONUtils;
// import lombok.extern.slf4j.Slf4j;
// import org.apache.commons.collections4.CollectionUtils;
// import org.apache.commons.lang3.StringUtils;
// import org.springframework.stereotype.Component;
//
// import java.util.Collections;
// import java.util.HashMap;
// import java.util.List;
// import java.util.Map;
//
// @Slf4j
// @Component
// public class RootSessionIdPredict extends BasicPredict {
//
//     @ApolloJsonValue("${root.session.id.tail.predict.config:[]}")
//     private List<RootSessionIdTailConfigItem> configItems;
//
//     @Override
//     public Map<String, Object> predict(PredictContext ctx) {
//         String rootSessionId = ctx.getRootSessionId();
//         if (CollectionUtils.isEmpty(configItems) || StringUtils.isEmpty(rootSessionId) || StringUtils.isEmpty(ctx.getShareType())) {
//             return Collections.emptyMap();
//         }
//
//
//         double score = this.calcScoreByMid(ctx.getMid());
//
//         String appType = ctx.getAppType();
//         String tail = rootSessionId.substring(rootSessionId.length() - 1);
//         String shareType = ctx.getShareType()
//                 .replace("return", "")
//                 .replace("mids", "");
//
//
//         for (RootSessionIdTailConfigItem item : configItems) {
//             if (item.getAppType().contains(appType) && item.getTail().contains(tail)) {
//                 double threshold;
//                 if (item.getConfig().containsKey(shareType)) {
//                     threshold = item.getConfig().getOrDefault(shareType, 0d);
//                 } else {
//                     threshold = item.getConfig().getOrDefault("threshold", 0d);
//                 }
//
//                 Map<String, Object> returnMap = new HashMap<>();
//
//                 if (score < threshold) {
//                     returnMap.putAll(rtnAdPredict(ctx));
//                     returnMap.put("model", "rootSessionIdTailModel");
//                 } else {
//                     returnMap.putAll(rtnNoAdPredict(ctx));
//                     returnMap.put("no_ad_strategy", "rootSessionIdTailModel");
//                 }
//
//                 returnMap.put("score", score);
//                 returnMap.put("threshold", threshold);
//
//                 JSONObject logJson = new JSONObject();
//                 logJson.putAll(returnMap);
//                 logJson.put("mid", ctx.getMid());
//                 logJson.put("appType", appType);
//                 logJson.put("rootSessionIdTail", tail);
//                 logJson.put("shareType", shareType);
//
//                 logJson.put("expId", "rootSessionIdTailExp");
//                 logJson.put("thresholdParamKey", shareType);
//                 logJson.put("adPlatformType", ctx.getAdPlatformType());
//                 logJson.put("abCode", ctx.getAdAbCode());
//                 logJson.put("extraParam", ctx.getExpConfigMap());
//                 logJson.put("configItem", item);
//                 logJson.put("rootSessionId", ctx.getRootSessionId());
//
//                 log.info("广告跳出选择 -- rootSessionId尾号实验结果: {}, 参数: {}",
//                         JSONUtils.toJson(returnMap), logJson.toJSONString());
//
//                 return returnMap;
//             }
//         }
//
//         return Collections.emptyMap();
//     }
// }
