-- ============================================================================
-- V100 — F-C6 관람객 멤버십/등급 (일반/바이어/VIP)
-- 담당: kintex-visitor(VIS)·admin(ADM) · 작성: 2026-07-23
-- ----------------------------------------------------------------------------
-- 목적: 재방문 횟수·바이어 인증 기반으로 관람객 등급을 산정하고 등급별 혜택을 표시.
--   등급 산정(서버 권위): VIP = visit_count>=5 또는 vip_grant / BUYER = buyer_verified / 그 외 GENERAL.
-- 원칙: tenant_id='KINTEX' 고정. 본인(user_id)만. 전부 멱등.
-- ============================================================================
CREATE TABLE IF NOT EXISTS visitor_membership (
    tenant_id      varchar(32)  NOT NULL DEFAULT 'KINTEX',
    user_id        varchar(64)  NOT NULL,
    visit_count    integer      NOT NULL DEFAULT 0,     -- 누적 방문(체크인) 횟수
    buyer_verified boolean      NOT NULL DEFAULT false,  -- 바이어 인증 여부
    vip_grant      boolean      NOT NULL DEFAULT false,  -- 수동 VIP 부여(초청 등)
    points         integer      NOT NULL DEFAULT 0,
    last_visit_at  timestamptz,
    updated_at     timestamptz  NOT NULL DEFAULT now(),
    CONSTRAINT pk_visitor_membership PRIMARY KEY (tenant_id, user_id)
);

-- ── 등급별 혜택 마스터(표시용) ──────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS membership_benefit (
    tenant_id  varchar(32)  NOT NULL DEFAULT 'KINTEX',
    tier       varchar(16)  NOT NULL,        -- GENERAL/BUYER/VIP
    seq        integer      NOT NULL DEFAULT 0,
    benefit    varchar(200) NOT NULL,
    CONSTRAINT pk_membership_benefit PRIMARY KEY (tenant_id, tier, seq)
);

INSERT INTO membership_benefit (tenant_id, tier, seq, benefit) VALUES
  ('KINTEX','GENERAL',0,'전시 입장 및 기본 세션 신청'),
  ('KINTEX','GENERAL',1,'전자 배지·모바일 티켓 지갑'),
  ('KINTEX','BUYER',0,'바이어 라운지 이용'),
  ('KINTEX','BUYER',1,'비즈니스 매칭 우선 배정'),
  ('KINTEX','BUYER',2,'인기 세션 사전 예약 우선권'),
  ('KINTEX','VIP',0,'VIP 라운지·전용 주차 우선'),
  ('KINTEX','VIP',1,'전 세션 예약 최우선 + 대기열 상위'),
  ('KINTEX','VIP',2,'전용 컨시어지·초청 네트워킹')
ON CONFLICT (tenant_id, tier, seq) DO NOTHING;

-- 데모 계정(admin) 멤버십 시드 — 바이어 인증 + 방문 3회(BUYER 등급). app_user 존재 시에만.
INSERT INTO visitor_membership (tenant_id, user_id, visit_count, buyer_verified, vip_grant, points, last_visit_at)
SELECT 'KINTEX','admin-d80a2603', 3, true, false, 1250, now()-interval '10 day'
WHERE EXISTS (SELECT 1 FROM app_user u WHERE u.id = 'admin-d80a2603')
ON CONFLICT (tenant_id, user_id) DO NOTHING;
