package xtools.boot.ip.utils;

import xtools.base.config.BaseParams;
import xtools.boot.api.exection.BizError;
import xtools.core.StringUtils;
import xtools.core.encrypt.Md5Utils;
import xtools.extend.IpLocalUtils;
import xtools.extend.dto.IpAddrDto;

import java.util.Objects;
import java.util.StringJoiner;

/**
 * <p>Title : IpUtils</p>
 * <p>Description : IpUtils</p>
 * <p>DevelopTools : Idea_x64_v2026.1</p>
 * <p>DevelopSystem : macOS Sequoia 15.7.5</p>
 * <p>Company : org.xujun</p>
 *
 * @author : XuJun
 * @version : 5.0.0
 * @date : 2026/2/16 10:41
 */
public class IpUtils implements BaseParams {

    /**
     * 是否初始化
     */
    private static boolean init = false;

    /**
     * 初始化
     */
    public static void init() {
        init = true;
    }

    /**
     * 查询IP对应地址
     *
     * @param ip IP
     * @return IP对应地址
     */
    public static IpAddrDto search(String ip) {
        if (!init) {
            throw new BizError("请先初始化IpUtils");
        }
        return IpLocalUtils.search(ip);
    }

    /**
     * 获取IP对应地址
     *
     * @param ip IP
     * @return IP对应地址
     */
    public static String searchAddr(String ip) {
        return searchAddr(search(ip));
    }

    /**
     * 获取IP对应地址
     *
     * @param addr 地址信息
     * @return IP对应地址
     */
    public static String searchAddr(IpAddrDto addr) {
        if (Objects.isNull(addr)) {
            return "未知";
        }
        StringJoiner joiner = new StringJoiner(CP_COMMA);
        if (StringUtils.isNotBlank(addr.getCountry())) {
            joiner.add(addr.getCountry());
        }
        if (StringUtils.isNotBlank(addr.getProvince())) {
            joiner.add(addr.getProvince());
        }
        if (StringUtils.isNotBlank(addr.getCity())) {
            joiner.add(addr.getCity());
        }
        return joiner.toString();
    }

    /**
     * 获取IP对应地址的编码
     *
     * @param addr 地址信息
     * @return IP对应地址的编码
     */
    public static String getCode(IpAddrDto addr) {
        return Md5Utils.encryptToString(searchAddr(addr));
    }

}
