package com.bcxin.risk.communicate;

import cn.hutool.core.date.DateUtil;
import com.bcxin.risk.common.util.ConfigUtil;
import com.bcxin.risk.common.util.HttpUtil;
import com.bcxin.risk.common.util.cipher.MD5Util;
import com.bcxin.risk.constant.Const;
import com.bcxin.risk.constant.DictConst;
import com.google.common.collect.Lists;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 将推送结果传到PSS主站
 */
@Service
public class PushService {

    public static final String pushUrl="/push/receivePushLog";

    public void pushLog(String type,String info,String flag,String data){
        // 发送初审信息到主站
        if (DictConst.SYNCTASKTYPE_TJCS.equals(type)) {
            pushActivity(PushTypeEnum.ACTIVITY_CHUSHEN_INFO,info,flag,data);
        }
        // 发送政府活动信息到主站
        else if (DictConst.SYNCTASKTYPE_ZFHD.equals(type)) {
            pushActivity(PushTypeEnum.ACTIVITY_INFO_GOV,info,flag,data);
        }
        // 同步报批文件
        else if(DictConst.SYNCTASKTYPE_BPCL.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_MATERIAL_BP,info,flag,data);
        }
        // 同步审批日志
        else if(DictConst.SYNCTASKTYPE_APPROVAL.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_APPROVE_LOG,info,flag,data);
        }
        // 初审通过同步
        else if(DictConst.SYNCTASKTYPE_CSTG.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_CHUSHEN_PASS,info,flag,data);
        }
        // 提交审批同步
        else if(DictConst.SYNCTASKTYPE_TJSP.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_APPROVE_PASS,info,flag,data);
        }
        // 发送提交审批
        else if(DictConst.SYNCTASKTYPE_TJSP.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_APPROVE_INFO,info,flag,data);
        }
        // 同步活动基础信息修改日志到主站
        else if(DictConst.SYNCTASKTYPE_ACTLOG.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_BASIC_CHANGE_LOG,info,flag,data);
        }
        // 同步材料修改日志到主站
        else if(DictConst.SYNCTASKTYPE_MATERAILLOG.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_MATERIAL_CHANGE_LOG,info,flag,data);
        }
        // 发送消息短信
        else if(DictConst.SYNCTASKTYPE_SENDMESSAGE.equals(type)){
            pushActivity(PushTypeEnum.ACTIVITY_SEND_MESSAGE,info,flag,data);
        }
        // 内网升级结果
        else if(DictConst.SYNCTASKTYPE_UPGREAD_RESULT.equals(type)){
            pushActivity(PushTypeEnum.SP_UPGRADE_RESULT,info,flag,data);
        }
    }

    /**
     * 推送活动信息
     * @param info
     * @param flag : SUCCESS/FAIL
     */
    public void pushActivity(PushTypeEnum pushType,String info,String flag,String data){
        String requestUrl = ConfigUtil.getValue("main_url")+pushUrl;
        List<NameValuePair> params = Lists.newArrayList();
        params.add(new BasicNameValuePair("pushType", pushType.getKey()));
        params.add(new BasicNameValuePair("pushTypeName", pushType.getAlias()));
        params.add(new BasicNameValuePair("pushMethod", PushMethodEnum.SB_TO_PSS.getKey()));
        params.add(new BasicNameValuePair("paramData", data));
        params.add(new BasicNameValuePair("info", info));
        params.add(new BasicNameValuePair("flag", flag));
        params.add(new BasicNameValuePair("sign", MD5Util.string2MD5(Const.ENVI + DateUtil.today())));
        String status = HttpUtil.sendPostRequest(requestUrl,params);
    }


    /**
     * 推送类型
     */
    public enum PushTypeEnum{
        ACTIVITY_CHUSHEN_INFO("ACTIVITY_CHUSHEN_INFO","活动初审信息提交"),
        ACTIVITY_MATERIAL_BP("ACTIVITY_MATERIAL_BP","活动报批材料"),
        ACTIVITY_APPROVE_LOG("ACTIVITY_APPROVE_LOG","活动审批日志"),
        ACTIVITY_CHUSHEN_PASS("ACTIVITY_CHUSHEN_PASS","活动初审通过"),
        ACTIVITY_APPROVE_PASS("ACTIVITY_APPROVE_PASS","活动审批通过"),
        ACTIVITY_APPROVE_INFO("ACTIVITY_APPROVE_INFO","活动审批信息提交"),

        ACTIVITY_BASIC_CHANGE_LOG("ACTIVITY_BASIC_CHANGE_LOG","活动修改基础信息提交"),
        ACTIVITY_MATERIAL_CHANGE_LOG("ACTIVITY_MATERIAL_CHANGE_LOG","活动修改材料信息提交"),

        ACTIVITY_INFO_GOV("ACTIVITY_INFO_GOV","政府类活动信息提交"),
        ACTIVITY_SEND_MESSAGE("ACTIVITY_SEND_MESSAGE","发送活动通知消息"),

        SP_UPGRADE_RESULT("SP_UPGRADE_RESULT","内网升级结果");

        private String key;
        private String alias;

        PushTypeEnum(String key, String alias){
            this.key=key;
            this.alias=alias;
        }

        public String getKey(){
            return this.key;
        }

        public String getAlias(){
            return this.alias;
        }

        public static String getAlias(String key){
            for(PushTypeEnum e : PushTypeEnum.values()){
                if(e.getKey().equals(key)){
                    return e.getAlias();
                }
            }
            return "";
        }
    }

    /**
     * 推送方式
     */
    public enum PushMethodEnum{
        PSS_TO_SB("PSS_TO_SB","PSS_TO_SB"),
        SB_TO_PSS("SB_TO_PSS","SB_TO_PSS");

        private String key;
        private String alias;

        PushMethodEnum(String key, String alias){
            this.key=key;
            this.alias=alias;
        }

        public String getKey(){
            return this.key;
        }

        public String getAlias(){
            return this.alias;
        }

        public static String getAlias(String key){
            for(PushMethodEnum e : PushMethodEnum.values()){
                if(e.getKey().equals(key)){
                    return e.getAlias();
                }
            }
            return "";
        }
    }
}
