package com.palmnest.webapp.controller.utils;

import lombok.extern.slf4j.Slf4j;

import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

@Slf4j
public class SignUtil {


	private static String ST_MD5        = "md5";
	private static String ST_RSA        = "rsa";
	private static String ST_RSA_SHA256 = "rsa-256";
	private static String ST_SHA1       = "sha1";
	private static String ST_SHA256     = "sha-256";

	public SignUtil() {
	}

//    public static boolean checkSign(String signData, String charset, String sign_type, String sign, String key) {
//        boolean checkResult = false;
//        String calcSign = "";
//        if (ST_MD5.equalsIgnoreCase(sign_type)) {
//            calcSign = Md5.encode(signData + "&key=" + key, charset);
//            checkResult = sign.equalsIgnoreCase(calcSign);
//        } else if (ST_RSA.equalsIgnoreCase(sign_type)) {
//            checkResult = RSA.verifyBySHA1(signData, charset, sign, key);
//        } else if (ST_RSA_SHA256.equalsIgnoreCase(sign_type)) {
//            try {
//                checkResult = RSAUtils.verifySign(SignatureSuite.SHA256, signData.getBytes(charset), Base64.decode(sign), key);
//            } catch (UnsupportedEncodingException var9) {
//                log.error("checkSign error:{}", var9.getMessage());
//            }
//        } else if (ST_SHA1.equalsIgnoreCase(sign_type)) {
//            calcSign = SHA1.encode(signData + "&key=" + key, charset);
//            checkResult = sign.equalsIgnoreCase(calcSign);
//        } else if (ST_SHA256.equalsIgnoreCase(sign_type)) {
//            calcSign = SHA256.encode2base64(signData + "&key=" + key, charset);
//            checkResult = sign.equalsIgnoreCase(calcSign);
//        } else {
//            log.error("invalid sign type:{}", sign_type);
//        }
//
//        if (!checkResult) {
//            log.debug("signData:{}, input sign:{}, calcsign:{}", new Object[]{signData, sign, calcSign});
//        }
//
//        return checkResult;
//    }

	//    public static String genSign(String signData, String charset,  String key) {
//        String signResult = null;
//        
//        signResult = encode2base64(signData + "&key=" + key, charset);
//        
//
//        return signResult;
//    }
	public byte[] encode2bytes(String data, String charset) {
		if (null == data) {
			return null;
		} else {
			try {
				byte[] bytes;
				if (null == charset) {
					bytes = data.getBytes();
				} else {
					bytes = data.getBytes(charset);
				}

				return this.encode2bytes(bytes);
			} catch (Exception var4) {
				log.error("MD5 encode fail", var4);
				return null;
			}
		}
	}

	private byte[] encode2bytes(byte[] bytes) {

		return null;
	}

	//	public static String encode2base64(String data, String charset, boolean urlSafe) {
//        if (data == null) {
//            return null;
//        } else {
//            byte[] enData = encode2bytes(data, charset);
//            return Base64Utils.safeUrlBase64Encode(enData);
//        }
//    }
//    
//    public static String encode2base64(String data, String charset) {
//        return encode2base64(data, charset, true);
//    }
	public static String getSignStr(Object input) {
		if (input == null) {
			return null;
		} else {
			Map<String, Object> objFields = new TreeMap();
			ObjUtils.obj2Map(input, false, objFields);
			objFields.remove("sign");
			return map2Params(objFields, true);
		}
	}

	public static String map2Params(Map<String, Object> params, boolean removeBlankField) {
		StringBuilder sb    = new StringBuilder(1024);
		boolean       first = true;
		Iterator      i$    = params.entrySet().iterator();

		while (true) {
			Entry entry;
			do {
				if (!i$.hasNext()) {
					return sb.toString();
				}

				entry = (Entry) i$.next();
			} while (removeBlankField && (entry.getValue() == null || "".equals(entry.getValue().toString())));

			if (first) {
				first = false;
			} else {
				sb.append("&");
			}

			sb.append((String) entry.getKey()).append("=").append(entry.getValue().toString());
		}
	}


}
