package com.liquidnet.service.adam.service.caomei;

import java.util.Collections;
import java.util.Set;

/**
 * 用户补签审核状态快照（按「徽章 ID」与「场次 performanceId」两个维度聚合）。
 * <p>
 * 由 {@link CaomeiBadgeEligibilityService#loadApplyBadgeStatus} 从 DB 补签表加载，
 * 供护照首页货架（{@code claimable} / {@code applyPending}）与演出徽章认领前置判断共用，
 * 避免 home 展示与 POST claim 规则不一致。
 */
public final class CaomeiBadgeApplyStatus {

    /** 审核已通过（auditStatus=1）的补签申请对应的 badgeId */
    private final Set<String> passedApplyBadgeIds;
    /** 待审核（auditStatus=0）的补签申请对应的 badgeId */
    private final Set<String> pendingApplyBadgeIds;
    /** 审核已通过补签所关联的场次 ID（含从 badge 配置兜底解析的 performanceId） */
    private final Set<String> passedApplyPerformanceIds;
    /** 待审核补签所关联的场次 ID */
    private final Set<String> pendingApplyPerformanceIds;

    /**
     * @param passedApplyBadgeIds        已通过补签的徽章 ID 集合，可为 null（视为空集）
     * @param pendingApplyBadgeIds       待审核补签的徽章 ID 集合，可为 null
     * @param passedApplyPerformanceIds  已通过补签的场次 ID 集合，可为 null
     * @param pendingApplyPerformanceIds 待审核补签的场次 ID 集合，可为 null
     */
    public CaomeiBadgeApplyStatus(Set<String> passedApplyBadgeIds,
                                  Set<String> pendingApplyBadgeIds,
                                  Set<String> passedApplyPerformanceIds,
                                  Set<String> pendingApplyPerformanceIds) {
        this.passedApplyBadgeIds = passedApplyBadgeIds == null ? Collections.emptySet() : passedApplyBadgeIds;
        this.pendingApplyBadgeIds = pendingApplyBadgeIds == null ? Collections.emptySet() : pendingApplyBadgeIds;
        this.passedApplyPerformanceIds = passedApplyPerformanceIds == null ? Collections.emptySet() : passedApplyPerformanceIds;
        this.pendingApplyPerformanceIds = pendingApplyPerformanceIds == null ? Collections.emptySet() : pendingApplyPerformanceIds;
    }

    public Set<String> getPassedApplyBadgeIds() {
        return passedApplyBadgeIds;
    }

    public Set<String> getPendingApplyBadgeIds() {
        return pendingApplyBadgeIds;
    }

    public Set<String> getPassedApplyPerformanceIds() {
        return passedApplyPerformanceIds;
    }

    public Set<String> getPendingApplyPerformanceIds() {
        return pendingApplyPerformanceIds;
    }
}
