package com.zioinfo.kintex.marketing.dto;

import java.util.List;

/**
 * M12 EDM·캠페인 · 스폰서십 응답/요청 DTO 모음.
 * <p>스폰서·기업명은 민감정보가 아니다(공개 마케팅 대상). 관람객 PII 는 이 모듈이 다루지 않는다.
 */
public final class MarketingDtos {

    private MarketingDtos() {
    }

    // ── SCR-33 EDM·캠페인 ──
    public record CampaignDto(String id, String name, String status, int audience,
                              String meta, String openRate, String clickRate) {
    }

    /** 캠페인 생성 요청 — 발송은 미구현(status 전이만). */
    public record CampaignCreateRequest(String name, Integer audience, String meta,
                                        String scheduleType, String scheduledAt) {
    }

    /** 캠페인 발송 요청 — live=true 면 운영 실발송, 그 외/미지정은 테스트 모드(안전 기본). */
    public record CampaignSendRequest(Boolean live) {
    }

    /**
     * 캠페인 발송 결과 집계 — 수신자 원문/PII 는 포함하지 않는다(건수만).
     * <ul>
     *   <li>{@code testMode} — 테스트 모드 여부(실 수신자 미발송).</li>
     *   <li>{@code eligible} — 수신동의·미거부 대상 총수(상한 적용 전).</li>
     *   <li>{@code sentCount} — 실제 디스패치된 건수(테스트 모드면 테스트 수신함 건수).</li>
     *   <li>{@code skipped} — 상한/rate cap/무효로 발송하지 않은 건수.</li>
     *   <li>{@code failed} — 동기 검증 실패 건수(SMTP 비동기 실패는 mail_log 이력).</li>
     * </ul>
     */
    public record CampaignSendResult(String id, String status, boolean testMode, boolean mailEnabled,
                                     int eligible, int sentCount, int skipped, int failed,
                                     String meta) {
    }

    // ── SCR-34 스폰서십 ──
    public record SponsorshipView(List<MktKpi> kpis, List<TierDto> tiers, List<SponsorDto> sponsors) {
    }

    public record MktKpi(String label, String value, String unit, String tone) {
    }

    public record TierDto(String id, String name, String nameKo, String price, String accent,
                          List<String> benefits, int remaining, String status, Integer dday) {
    }

    public record SponsorDto(String id, String name, String initial, String tier, String status,
                             List<Fulfillment> fulfillment) {
    }

    public record Fulfillment(String id, String label, boolean done) {
    }
}
