-- ============================================================================
-- V97 — F-B5 결제수단 사전등록·간편결제 (mock PG 토큰화)
-- 담당: kintex-visitor(VIS)·backend · 작성: 2026-07-23
-- ----------------------------------------------------------------------------
-- 목적: 로그인 관람객이 결제수단을 사전 등록(mock PG 토큰화)하고, 저장 수단으로 빠른결제.
-- 원칙: tenant_id='KINTEX' 고정. 본인(user_id) 소유분만.
--   보안(§0-3): 카드 원문(PAN·유효기간·CVC) 절대 미보관 — 브랜드 + 마스킹 뒤4자리 + mock PG 토큰만 저장.
--   전부 멱등.
-- ============================================================================
CREATE TABLE IF NOT EXISTS visitor_pay_method (
    tenant_id    varchar(32)  NOT NULL DEFAULT 'KINTEX',
    id           varchar(64)  NOT NULL,
    user_id      varchar(64)  NOT NULL,
    kind         varchar(16)  NOT NULL DEFAULT 'card',   -- card/easy/bank
    brand        varchar(40),                            -- 신한/현대/카카오페이 등(표시용)
    last4        varchar(4),                             -- 마스킹 뒤 4자리(표시용)
    pg_token     varchar(80)  NOT NULL,                  -- mock PG 빌링 토큰(원문 카드정보 아님)
    is_default   boolean      NOT NULL DEFAULT false,
    label        varchar(60),
    created_at   timestamptz  NOT NULL DEFAULT now(),
    CONSTRAINT pk_visitor_pay_method PRIMARY KEY (tenant_id, id)
);
CREATE INDEX IF NOT EXISTS ix_visitor_pay_method_user ON visitor_pay_method (tenant_id, user_id, is_default DESC, created_at DESC);

-- 데모 계정(admin) 저장 결제수단 2종(멱등) — app_user 존재 시에만.
INSERT INTO visitor_pay_method (tenant_id, id, user_id, kind, brand, last4, pg_token, is_default, label)
SELECT * FROM (VALUES
  ('KINTEX','vpm-admin-1','admin-d80a2603','card','신한카드','4821','MOCKTOK-SH-4821', true,  '기본 결제카드'),
  ('KINTEX','vpm-admin-2','admin-d80a2603','easy','카카오페이','0000','MOCKTOK-KKO-0000', false, '카카오페이')
) AS v(tenant_id,id,user_id,kind,brand,last4,pg_token,is_default,label)
WHERE EXISTS (SELECT 1 FROM app_user u WHERE u.id = 'admin-d80a2603')
ON CONFLICT (tenant_id, id) DO NOTHING;
