package com.zioinfo.kintex.common.text;

/**
 * PII 마스킹 유틸(§0-3) — 전화/이메일/IP 원문을 응답·로그·저장 전에 마스킹한다.
 * 시스템관리 조회(회사 연락처·로그인 이력)에서 공용으로 사용한다.
 */
public final class Masking {

    private Masking() {
    }

    /** 010-1234-5678 → 010-****-5678. 형식이 다르면 뒤 4자리만 노출. null 안전. */
    public static String maskPhone(String phone) {
        if (phone == null || phone.isBlank()) {
            return phone;
        }
        String digits = phone.replaceAll("[^0-9]", "");
        if (digits.length() < 7) {
            return "***";
        }
        String last4 = digits.substring(digits.length() - 4);
        String head = digits.substring(0, Math.min(3, digits.length() - 4));
        return head + "-****-" + last4;
    }

    /** kim.hong@do.com → ki***@do.com. null 안전. */
    public static String maskEmail(String email) {
        if (email == null || email.isBlank()) {
            return email;
        }
        int at = email.indexOf('@');
        if (at <= 0) {
            return "***";
        }
        String local = email.substring(0, at);
        String domain = email.substring(at);
        String head = local.length() <= 2 ? local.substring(0, 1) : local.substring(0, 2);
        return head + "***" + domain;
    }

    /** 203.0.113.24 → 203.0.113.*  (IPv6 등은 앞 절반만). null 안전. */
    public static String maskIp(String ip) {
        if (ip == null || ip.isBlank()) {
            return ip;
        }
        int dot = ip.lastIndexOf('.');
        if (dot > 0) {
            return ip.substring(0, dot) + ".*";
        }
        int colon = ip.indexOf(':');
        if (colon > 0) {
            return ip.substring(0, colon) + ":***";
        }
        return "***";
    }
}
