package com.zioinfo.kintex.visitor.membership;

/**
 * F-C6 관람객 멤버십 등급 산정(순수 함수 — 단위테스트 대상). 서버 권위.
 *
 * <p>규칙: VIP = vipGrant 또는 방문 {@value #VIP_MIN_VISITS}회 이상 / BUYER = 바이어 인증 / 그 외 GENERAL.
 */
public final class MembershipTier {

    public static final int VIP_MIN_VISITS = 5;

    private MembershipTier() {
    }

    /** 등급 코드(GENERAL/BUYER/VIP). */
    public static String of(int visitCount, boolean buyerVerified, boolean vipGrant) {
        if (vipGrant || visitCount >= VIP_MIN_VISITS) {
            return "VIP";
        }
        if (buyerVerified) {
            return "BUYER";
        }
        return "GENERAL";
    }

    /** 등급 표시명. */
    public static String label(String tier) {
        return switch (tier) {
            case "VIP" -> "VIP";
            case "BUYER" -> "바이어";
            default -> "일반";
        };
    }

    /** 다음 등급까지 남은 방문 수(VIP는 0). GENERAL/BUYER → VIP 승급 기준(방문). */
    public static int visitsToNextTier(String tier, int visitCount) {
        if ("VIP".equals(tier)) {
            return 0;
        }
        return Math.max(0, VIP_MIN_VISITS - visitCount);
    }
}
