-- ============================================================================
-- V98 — F-C4 관람객↔관람객 QR 명함 교환·컨택트 지갑
-- 담당: kintex-visitor(VIS) · 작성: 2026-07-23
-- ----------------------------------------------------------------------------
-- 목적: 리드캡처(업체→관람객) 외에 관람객 상호 QR 스캔으로 명함(컨택트)을 교환·지갑 저장.
-- 원칙: tenant_id='KINTEX' 고정. 본인(owner_user_id) 지갑만 조회.
--   보안(§0-3): 저장 컨택트의 연락처·이메일은 마스킹 저장(원문 미보관). 공유 QR 토큰은 회전·재사용 제한 없이
--       단순 랜덤 식별자(교환 매개) — 명함 카드 자체가 공개 공유 대상이므로 PII는 소유자가 등록한 표시값만.
--   전부 멱등.
-- ============================================================================

-- ── 1) 내 명함 카드(공유 대상) ───────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS visitor_contact_card (
    tenant_id     varchar(32)  NOT NULL DEFAULT 'KINTEX',
    user_id       varchar(64)  NOT NULL,
    display_name  varchar(120) NOT NULL,
    company       varchar(160),
    title         varchar(120),
    email_masked  varchar(160),
    phone_masked  varchar(40),
    share_token   varchar(48)  NOT NULL,        -- QR 교환 토큰(명함 공유 매개)
    updated_at    timestamptz  NOT NULL DEFAULT now(),
    CONSTRAINT pk_visitor_contact_card PRIMARY KEY (tenant_id, user_id),
    CONSTRAINT uq_visitor_contact_card_tok UNIQUE (share_token)
);

-- ── 2) 컨택트 지갑(교환으로 저장된 상대 명함) ────────────────────────────────
CREATE TABLE IF NOT EXISTS visitor_contact (
    tenant_id        varchar(32)  NOT NULL DEFAULT 'KINTEX',
    id               varchar(64)  NOT NULL,
    owner_user_id    varchar(64)  NOT NULL,     -- 지갑 소유자
    contact_user_id  varchar(64),               -- 상대(교환 상대 user_id)
    display_name     varchar(120) NOT NULL,
    company          varchar(160),
    title            varchar(120),
    email_masked     varchar(160),
    phone_masked     varchar(40),
    memo             varchar(300),
    saved_at         timestamptz  NOT NULL DEFAULT now(),
    CONSTRAINT pk_visitor_contact PRIMARY KEY (tenant_id, id),
    CONSTRAINT uq_visitor_contact_pair UNIQUE (owner_user_id, contact_user_id)
);
CREATE INDEX IF NOT EXISTS ix_visitor_contact_owner ON visitor_contact (tenant_id, owner_user_id, saved_at DESC);

-- ============================================================================
-- 시드 — 데모 계정(admin) 명함 카드 + 교환된 컨택트 1건(멱등). app_user 존재 시에만.
-- ============================================================================
INSERT INTO visitor_contact_card (tenant_id, user_id, display_name, company, title, email_masked, phone_masked, share_token)
SELECT 'KINTEX','admin-d80a2603','관람객(데모)','킨텍스','매니저','ad***@example.com','010-****-0001','SHARE-ADMIN-DEMO01'
WHERE EXISTS (SELECT 1 FROM app_user u WHERE u.id = 'admin-d80a2603')
ON CONFLICT (tenant_id, user_id) DO NOTHING;

INSERT INTO visitor_contact (tenant_id, id, owner_user_id, contact_user_id, display_name, company, title, email_masked, phone_masked, memo)
SELECT 'KINTEX','vc-admin-1','admin-d80a2603','demo-visitor-01','김바이어','글로벌테크','구매팀장','ki***@example.com','010-****-3456','스마트팩토리 관 부스 A-12 미팅'
WHERE EXISTS (SELECT 1 FROM app_user u WHERE u.id = 'admin-d80a2603')
ON CONFLICT (owner_user_id, contact_user_id) DO NOTHING;
