package com.zm.order.tool.server.engine;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Maps;
import org.springframework.util.CollectionUtils;

import java.util.*;

/**
 * 会员信息
 *
 * @author nianchang
 * @ClassName ParseEngine7
 * @date 2021/06/17 10:58 上午
 */
@SuppressWarnings("all")
public class ParseEngine7 {

    public static Map<String, Object> parse(Map<String, Object> BaseMap, Map<String, Object> dataMap, String elName) {
        String id = BaseMap.get("id") != null ? BaseMap.get("id").toString() : "";
        Integer marginTop = BaseMap.get("marginTop") != null ? Integer.valueOf(BaseMap.get("marginTop").toString()) : 0;
        Integer marginBottom = BaseMap.get("marginBottom") != null ? Integer.valueOf(BaseMap.get("marginBottom").toString()) : 0;
        Integer marginLeft = BaseMap.get("marginLeft") != null ? Integer.valueOf(BaseMap.get("marginLeft").toString()) : 0;
        Integer marginRight = BaseMap.get("marginRight") != null ? Integer.valueOf(BaseMap.get("marginRight").toString()) : 0;

        Integer borderRadius = dataMap.get("borderRadius") != null ? Integer.valueOf(dataMap.get("borderRadius").toString()) : 20;
        Integer memberStyle = dataMap.get("memberStyle") != null ? Integer.valueOf(dataMap.get("memberStyle").toString()) : 3;
        List<String> assetsList = dataMap.get("assetsList") != null ?
                JSON.parseArray(dataMap.get("assetsList").toString(), String.class) : new ArrayList<>();
        String integral = dataMap.get("integral") != null ? dataMap.get("integral").toString() : "积分";
        String balance = dataMap.get("borderRadius") != null ? dataMap.get("balance").toString() : "余额";
        String coupon = dataMap.get("coupon") != null ? dataMap.get("coupon").toString() : "优惠券";
        String card = dataMap.get("card") != null ? dataMap.get("card").toString() : "礼品卡";
        String img = dataMap.get("img") != null ? dataMap.get("img").toString() : "";

        Map<String, Object> source = buildDataSource(elName, id, marginTop, marginBottom, marginLeft, marginRight, borderRadius,
                memberStyle, assetsList, integral, balance, coupon, card, img);
        return source;
    }

    private static Map<String, Object> buildDataSource(String elName, String id, Integer marginTop, Integer marginBottom,
                                                       Integer marginLeft, Integer marginRight, Integer borderRadius,
                                                       Integer memberStyle, List<String> assetsList, String integral,
                                                       String balance, String coupon, String card, String img) {
        Map<String, Object> data = new HashMap<>();
        data.put("elName", elName);
        data.put("title", "会员信息");
        Map<String, Object> map = buildCommonStyleMap(marginTop, marginBottom, marginLeft, marginRight);
        data.put("commonStyle", map);
        data.put("isFixed", false);
        data.put("propsValue", buildPropsValue(borderRadius, memberStyle, assetsList, integral, balance, coupon, card, img));
        data.put("events", buildEvents());
        data.put("temName", "qm-member-info");
        data.put("icon", "qimai-huiyuan1");
        data.put("id", id);
        String miniStyle = BuildStyle.build(map, elName);
        data.put("miniStyle", miniStyle);
        return data;
    }

    private static Map<String, Object> buildEvents() {
        Map<String, Object> eventsMap = new HashMap<>();
        eventsMap.put("type", "");
        eventsMap.put("page", buildPage());
        eventsMap.put("phone", "");
        eventsMap.put("audioUrl", "");
        eventsMap.put("alipay", buildAliPay());
        eventsMap.put("map", buildMap());
        return eventsMap;
    }

    private static Map<String, Object> buildMap() {
        Map<String, Object> map = new HashMap<>();
        map.put("lng", "");
        map.put("lat", "");
        map.put("name", "");
        map.put("address", "");
        return map;
    }

    private static Map<String, Object> buildAliPay() {
        Map<String, Object> alipay = new HashMap<>();
        alipay.put("tntInstId", "");
        alipay.put("scene", "");
        return alipay;
    }

    private static Map<String, Object> buildPage() {
        Map<String, Object> page = new HashMap<>();
        page.put("link", "");
        page.put("linkType", "");
        page.put("linkText", "");
        page.put("extraData", new HashMap<>());
        return page;
    }

    private static Map<String, Object> buildPropsValue(Integer borderRadius, Integer memberStyle, List<String> assetsList, String integral,
                                                       String balance, String coupon, String card, String img) {
        Map<String, Object> propsValue = new HashMap<>();
        propsValue.put("borderRadius", borderRadius);
        propsValue.put("memberStyle", Objects.nonNull(memberStyle) ? memberStyle.toString() : "");
        propsValue.put("integral", integral);
        propsValue.put("balance", balance);
        propsValue.put("coupon", coupon);
        propsValue.put("card", card);
        propsValue.put("img", img);
        propsValue.put("assetsList", assetsList);
        return propsValue;
    }

    private static List<Map<String, Object>> buildHotList(List<Map> hotList) {
        List<Map<String, Object>> newHotList = new ArrayList<>();
        if (!CollectionUtils.isEmpty(hotList)) {
            for (Map<String, Object> map : hotList) {
                Map<String, Object> dataMap = new HashMap<>();
                dataMap.put("width", Objects.nonNull(map.get("width")) ? map.get("width") : 0);
                dataMap.put("height", Objects.nonNull(map.get("height")) ? map.get("height") : 0);
                dataMap.put("left", Objects.nonNull(map.get("left")) ? map.get("left") : 0);
                dataMap.put("top", Objects.nonNull(map.get("top")) ? map.get("top") : 0);
                dataMap.put("borderRadius", Objects.nonNull(map.get("borderRadius")) ? map.get("borderRadius") : 0);
                dataMap.put("link", Objects.nonNull(map.get("link")) ? map.get("link") : "");
                dataMap.put("linkType", Objects.nonNull(map.get("linkType")) ? map.get("linkType") : "");
                dataMap.put("linkText", Objects.nonNull(map.get("linkText")) ? map.get("linkText") : "");
                dataMap.put("extraData", Maps.newHashMap());
                newHotList.add(dataMap);
            }
        }
        return newHotList;
    }

    private static Map<String, Object> buildPoints(String activeColor, Double inactiveOpacity, Integer bottomDistance) {
        Map<String, Object> points = new HashMap<>();
        points.put("bottomDistance", bottomDistance);
        points.put("inactiveOpacity", inactiveOpacity);
        points.put("activeColor", activeColor);
        return points;
    }

    private static Map<String, Object> buildCommonStyleMap(Integer marginTop, Integer marginBottom, Integer marginLeft,
                                                           Integer marginRight) {
        Map<String, Object> commonStyle = new HashMap<>();
        commonStyle.put("position", "relative");
        commonStyle.put("height", "auto");
        commonStyle.put("top", 0);
        commonStyle.put("left", 0);
        commonStyle.put("paddingTop", 0);
        commonStyle.put("paddingLeft", 0);
        commonStyle.put("paddingRight", 10);
        commonStyle.put("paddingBottom", 0);
        commonStyle.put("marginTop", marginTop);
        commonStyle.put("marginLeft", marginLeft);
        commonStyle.put("marginRight", marginRight);
        commonStyle.put("marginBottom", marginBottom);
        commonStyle.put("borderWidth", 0);
        commonStyle.put("borderColor", "transparent");
        commonStyle.put("borderStyle", "solid");
        commonStyle.put("borderRadius", 0);
        commonStyle.put("boxShadow", "");
        commonStyle.put("fontSize", 14);
        commonStyle.put("fontWeight", 400);
        commonStyle.put("lineHeight", 24);
        commonStyle.put("letterSpacing", 0);
        commonStyle.put("textAlign", "left");
        commonStyle.put("color", "#333");
        commonStyle.put("backgroundColor", "");
        commonStyle.put("backgroundImage", "");
        commonStyle.put("backgroundSize", "contain");
        commonStyle.put("backgroundRepeat", "no-repeat");
        commonStyle.put("backgroundPosition", "center");
        commonStyle.put("opacity", 1);
        commonStyle.put("rotate", 0);
        commonStyle.put("zIndex", 1);
        return commonStyle;
    }
}
