package com.fs.common.utils;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.fs.common.dto.PersonIdentityDTO;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

@Slf4j
public class ParseUtils {

    public static String parsePhone(String phone) {
        if (phone!=null){
            if(StringUtils.isNotBlank(phone.trim()) && phone.trim().length() == 11) {
                return phone.trim().replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
            }
        }
        return phone;

    }
    public static String parseAddress(String address) {

        if(address!=null){
            address=address.substring(0,address.length()/2)+"******";
            return address;
        }
        return "";
    }
    public static String parseIdCard(String idcard) {
        if(idcard!=null){
            idcard=idcard.substring(0,idcard.length()/2)+"******";
            return idcard;
        }
        else{
            return "";
        }

    }

    public static void main(String[] args) {
        PersonIdentityDTO dto = validateIdCard("向董董", "513022199804185613");
        log.info(dto.toString());
    }

    /**
     * 校验身份证和姓名是否一致
     * @param name 姓名
     * @param idCard 身份证
     * @return 1一致，否则抛出异常
     */
    public static PersonIdentityDTO validateIdCard(String name,String idCard){
        return checkIdCardAndName("10b395a78f4b43c2be8f8d2d59d16c1f", name, idCard);
    }
    /**
     * 使用 Hutool 工具包进行身份二要素实名认证
     * <p>
     * 业务逻辑:
     * 1. 调用 API，获取 JSON 响应。
     * 2. 解析 JSON，检查外层 'code' 字段。
     * 3. 如果 'code' 不为 "0"，抛出包含 'message' 信息的 RuntimeException。
     * 4. 如果 'code' 为 "0"，检查内层 'result.res' 字段。
     * 5. 如果 'result.res' 为 "1"，方法返回字符串 "1"。
     * 6. 如果 'result.res' 不为 "1"，抛出包含 'result.description' 信息的 RuntimeException。
     *
     * @param appCode 你的阿里云市场 AppCode
     * @param name    待校验的姓名
     * @param idcard  待校验的身份证号
     * @return 如果校验成功且信息一致，返回 "1"
     * @throws RuntimeException 当 API 返回错误或校验结果不一致时抛出
     */
    private static PersonIdentityDTO checkIdCardAndName(String appCode, String name, String idcard) {
        String url = "https://eid.shumaidata.com/eid/checkbody";
        Map<String, Object> params = new HashMap<>();
        params.put("idcard", idcard);
        params.put("name", name);
        String body = HttpRequest.post(url)
                .header("Authorization", "APPCODE " + appCode)
                .form(params)
                .timeout(10000)
                .execute()
                .body(); // 获取响应体
        System.out.println("API 原始返回: " + body);
        JSONObject responseJson = JSONUtil.parseObj(body);
        String code = responseJson.getStr("code");
        if (!"0".equals(code)) {
            String message = responseJson.getStr("message", "未知错误");
            throw new RuntimeException(message);
        }
        JSONObject resultObj = responseJson.getJSONObject("result");
        if (resultObj == null || resultObj.isEmpty()) {
            throw new RuntimeException("API调用成功，但返回的result内容为空");
        }
        String res = resultObj.getStr("res");
        if ("1".equals(res)) {
            PersonIdentityDTO dto = JSON.parseObject(resultObj.toString(), PersonIdentityDTO.class);
            return dto;
        } else {
            // 核验结果不一致或无记录, 抛出 description
            String description = resultObj.getStr("description", "核验不一致或无此记录");
            throw new RuntimeException("校验结果:"+description+",请检查身份证信息是否正确！");
        }
    }
}
