package com.jsowell.thirdparty.platform.util;

import com.alibaba.fastjson2.JSON;
import com.google.common.collect.Maps;
import com.jsowell.pile.domain.ThirdPartyPlatformConfig;
import com.jsowell.pile.vo.ThirdPartySecretInfoVO;
import org.springframework.stereotype.Component;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Component
public class ThirdPartyPlatformUtils {

    /**
     * 生成结果集
     * @param obj 需要返回的数据
     * @param secretInfo 密钥配置信息对象
     * @return 结果集
     */
    public static Map<String, String> generateResultMap(Object obj, ThirdPartySecretInfoVO secretInfo) {
        return generateResultMap(obj, secretInfo.getOurDataSecret(), secretInfo.getOurDataSecretIv(), secretInfo.getTheirSigSecret());
    }

    /**
     * 生成结果集
     * @param obj 需要返回的数据
     * @param config 密钥配置信息对象
     * @return 结果集
     */
    public static Map<String, String> generateResultMap(Object obj, ThirdPartyPlatformConfig config) {
        return generateResultMap(obj, config.getDataSecret(), config.getDataSecretIv(), config.getSignSecret());
    }

    /**
     * 生成结果集
     * @param obj 需要返回的数据
     * @param dataSecret 消息密钥
     * @param dataSecretIv 消息密钥初始化向量
     * @param signSecret 签名密钥
     * @return 结果集
     */
    public static Map<String, String> generateResultMap(Object obj, String dataSecret, String dataSecretIv, String signSecret) {
        Map<String, String> resultMap = Maps.newHashMap();
        // 加密数据
        String encryptData = Cryptos.aesEncrypt(JSON.toJSONString(obj), dataSecret, dataSecretIv);
        resultMap.put("Data", encryptData);
        // 生成sig
        String resultSign = GBSignUtils.sign(resultMap, signSecret);
        resultMap.put("Sig", resultSign);
        return resultMap;
    }

    /**
     * 从给定的URL字符串中提取充电桩枪口号。
     *
     * @param url URL字符串
     * @return 提取的枪口号，如果没有找到则返回null
     */
    public static String extractConnectorID(String url) {
        String regex = "/app-xcx-h5/pile/connectorDetail/(\\d+)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(url);
        if (matcher.find()) {
            return matcher.group(1); // 返回正则表达式括号内匹配的数字
        }
        return null; // 没有找到匹配项
    }

}
