-- V18: M12 EDM·캠페인 · 스폰서십 패키지/판매
-- 멱등(IF NOT EXISTS / ON CONFLICT DO NOTHING). 기존 마이그레이션 불변.
-- 실 발송은 미구현 — 캠페인은 status 전이만(발송 게이트웨이 연동은 후속 갭).

-- ── EDM·캠페인 (SCR-33) ─────────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS edm_campaign (
    id           varchar(40)  PRIMARY KEY,
    event_id     varchar(40)  NOT NULL REFERENCES event(id) ON DELETE CASCADE,
    name         varchar(300) NOT NULL,
    status       varchar(20)  NOT NULL DEFAULT 'draft',   -- draft|scheduled|sending|done
    audience     integer      NOT NULL DEFAULT 0,
    meta         varchar(300),                            -- 표시용 부가정보(최종수정·발송예정 등)
    open_rate    varchar(40)  NOT NULL DEFAULT '-',
    click_rate   varchar(40)  NOT NULL DEFAULT '-',
    scheduled_at timestamptz,
    created_at   timestamptz  NOT NULL DEFAULT now(),
    updated_at   timestamptz  NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_edm_campaign_event ON edm_campaign (event_id, created_at DESC);

-- ── 스폰서십 패키지 (SCR-34, F070) ──────────────────────────────────────────
CREATE TABLE IF NOT EXISTS sponsorship_package (
    id          varchar(40)  PRIMARY KEY,
    event_id    varchar(40)  NOT NULL REFERENCES event(id) ON DELETE CASCADE,
    code        varchar(30)  NOT NULL,               -- diamond|gold|silver
    name        varchar(60)  NOT NULL,               -- DIAMOND/GOLD/SILVER
    name_ko     varchar(60)  NOT NULL,
    price       bigint       NOT NULL DEFAULT 0,      -- KRW
    accent      varchar(20),
    benefits    jsonb        NOT NULL DEFAULT '[]'::jsonb,
    total_qty   integer      NOT NULL DEFAULT 0,
    sold_qty    integer      NOT NULL DEFAULT 0,
    dday        integer,
    sort_order  integer      NOT NULL DEFAULT 0,
    created_at  timestamptz  NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_sponsorship_pkg_event ON sponsorship_package (event_id, sort_order);

-- ── 스폰서 계약/판매 (SCR-34) ──────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS sponsorship_sponsor (
    id              varchar(40)  PRIMARY KEY,
    event_id        varchar(40)  NOT NULL REFERENCES event(id) ON DELETE CASCADE,
    package_id      varchar(40)  REFERENCES sponsorship_package(id) ON DELETE SET NULL,
    name            varchar(200) NOT NULL,           -- 기업명(민감정보 아님)
    tier_label      varchar(80),
    contract_status varchar(20)  NOT NULL DEFAULT 'pending',  -- signed|pending
    fulfillment     jsonb        NOT NULL DEFAULT '[]'::jsonb,
    created_at      timestamptz  NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_sponsorship_sponsor_event ON sponsorship_sponsor (event_id);

-- ── 시드(기존 event 참조 · 멱등) ────────────────────────────────────────────
INSERT INTO edm_campaign (id, event_id, name, status, audience, meta, open_rate, click_rate) VALUES
  ('cp-smf-001','e-2026-smf','2026 스마트팩토리 사전등록 안내','draft',    5200, '최종 수정: 2시간 전',            '-',      '-'),
  ('cp-smf-002','e-2026-smf','VIP 바이어 네트워킹 데이 초대권','scheduled', 850,  '발송 예정: 2026.08.05 10:00',   '24% (예상)','5% (예상)'),
  ('cp-smf-003','e-2026-smf','글로벌 테크 트렌드 리포트 (Vol. 12)','sending', 12000,'진행률: 68% (8,160건 완료)',    '42.5%',  '11.2%'),
  ('cp-smf-004','e-2026-smf','KINTEX 개막 D-7 프로그램 안내','done',       45000, '완료일: 2026.08.04',            '31.8%',  '2.4%')
ON CONFLICT (id) DO NOTHING;

INSERT INTO sponsorship_package (id, event_id, code, name, name_ko, price, accent, benefits, total_qty, sold_qty, dday, sort_order) VALUES
  ('sp-smf-diamond','e-2026-smf','diamond','DIAMOND','다이아몬드',50000000,'#B8860B',
     '["메인 로고 노출 (온·오프라인)","전시 부스 100㎡ (최우선 배정)","연사 세션 2회 부여"]'::jsonb, 2, 1, 12, 1),
  ('sp-smf-gold','e-2026-smf','gold','GOLD','골드',30000000,'#667085',
     '["서브 로고 노출","전시 부스 50㎡","연사 세션 1회"]'::jsonb, 3, 3, NULL, 2),
  ('sp-smf-silver','e-2026-smf','silver','SILVER','실버',15000000,'#8B4513',
     '["일반 로고 노출","전시 부스 20㎡"]'::jsonb, 5, 2, NULL, 3)
ON CONFLICT (id) DO NOTHING;

INSERT INTO sponsorship_sponsor (id, event_id, package_id, name, tier_label, contract_status, fulfillment) VALUES
  ('ss-smf-001','e-2026-smf','sp-smf-diamond','(주)테크솔루션','다이아몬드 패키지','signed',
     '[{"id":"f1","label":"공식 홈페이지 로고 노출","done":true},{"id":"f2","label":"전시 홀 부스 배정 (A-101)","done":true},{"id":"f3","label":"연사 세션 주제 선정","done":false},{"id":"f4","label":"브로슈어 광고 인쇄","done":false}]'::jsonb),
  ('ss-smf-002','e-2026-smf','sp-smf-gold','글로벌바이오','골드 패키지','pending',
     '[{"id":"f1","label":"공식 홈페이지 로고 노출","done":true},{"id":"f2","label":"전시 홀 부스 배정","done":false}]'::jsonb),
  ('ss-smf-003','e-2026-smf','sp-smf-silver','넥스트인더스트리','실버 패키지','signed',
     '[{"id":"f1","label":"공식 홈페이지 로고 노출","done":true},{"id":"f2","label":"전시 홀 부스 배정 (C-210)","done":true}]'::jsonb)
ON CONFLICT (id) DO NOTHING;
