-- =====================================================================
-- V15 M8 반입/반출 도크 슬롯 예약 (SCR-25) — dock · dock_reservation
-- 멱등: CREATE TABLE IF NOT EXISTS + 시드 ON CONFLICT DO NOTHING.
-- dock 은 하역장 물리 도크(홀 귀속), dock_reservation 은 행사·방향·일자·시간대 슬롯.
-- 슬롯 중복(같은 도크·일자·방향의 시간대 겹침)은 서비스에서 409 CONFLICT 판정.
-- 시드는 e-2026-smf(홀 H7, 반입일 2026-08-11 / 반출일 2026-08-15) 참조.
-- V1~V13 불변 · 이 파일은 V15 단일 버전만 사용.
-- =====================================================================

-- 하역장 도크 마스터(홀별) ----------------------------------------------
CREATE TABLE IF NOT EXISTS dock (
    id             varchar(40) PRIMARY KEY,
    hall_id        varchar(20) NOT NULL REFERENCES hall(id),
    dock_no        integer     NOT NULL,
    label          varchar(40) NOT NULL,
    heavy_priority boolean     NOT NULL DEFAULT false,  -- 중량물(5t↑) 우선 도크
    created_at     timestamptz NOT NULL DEFAULT now(),
    UNIQUE (hall_id, dock_no)
);
CREATE INDEX IF NOT EXISTS idx_dock_hall ON dock(hall_id);

-- 도크 예약(반입/반출 슬롯) ---------------------------------------------
CREATE TABLE IF NOT EXISTS dock_reservation (
    id             varchar(40)  PRIMARY KEY,
    event_id       varchar(40)  NOT NULL REFERENCES event(id) ON DELETE CASCADE,
    dock_id        varchar(40)  NOT NULL REFERENCES dock(id),
    direction      varchar(4)   NOT NULL,             -- in|out
    reserve_date   date         NOT NULL,
    start_hour     integer      NOT NULL,             -- 8..19 (그리드 08:00~19:00)
    span           integer      NOT NULL DEFAULT 2,   -- 점유 시간대 수
    company_name   varchar(120),
    vehicle_no     varchar(30),
    vehicle_weight varchar(20),
    item           varchar(200),
    forklift       boolean      NOT NULL DEFAULT false,
    tone           varchar(10)  NOT NULL DEFAULT 'booked',  -- booked|priority
    created_at     timestamptz  NOT NULL DEFAULT now()
);
CREATE INDEX IF NOT EXISTS idx_dock_reservation_lookup
    ON dock_reservation(event_id, direction, reserve_date);

-- ── 시드: 홀 H7 도크 6개 ───────────────────────────────────────────────
INSERT INTO dock (id, hall_id, dock_no, label, heavy_priority) VALUES
  ('dock-h7-1', 'H7', 1, '도크 1', true),
  ('dock-h7-2', 'H7', 2, '도크 2', false),
  ('dock-h7-3', 'H7', 3, '도크 3', false),
  ('dock-h7-4', 'H7', 4, '도크 4', false),
  ('dock-h7-5', 'H7', 5, '도크 5', false),
  ('dock-h7-6', 'H7', 6, '도크 6', false)
ON CONFLICT (hall_id, dock_no) DO NOTHING;

-- ── 시드: 반입(2026-08-11) 예약 (Stitch SCR-25 정합) ───────────────────
INSERT INTO dock_reservation
  (id, event_id, dock_id, direction, reserve_date, start_hour, span, company_name, vehicle_no, vehicle_weight, item, forklift, tone) VALUES
  ('dr-smf-in-1', 'e-2026-smf', 'dock-h7-1', 'in', DATE '2026-08-11',  8, 2, '(주)공간디자인',   '12가 3456', '5t',   '전시 부스 자재', true,  'booked'),
  ('dr-smf-in-2', 'e-2026-smf', 'dock-h7-1', 'in', DATE '2026-08-11', 11, 2, NULL,               NULL,        '5t',   '중량물 우선(5t↑)', false, 'priority'),
  ('dr-smf-in-3', 'e-2026-smf', 'dock-h7-2', 'in', DATE '2026-08-11', 12, 3, '글로벌부스테크',   '34나 5678', '2.5t', '조립식 부스',    false, 'booked'),
  ('dr-smf-in-4', 'e-2026-smf', 'dock-h7-3', 'in', DATE '2026-08-11',  9, 2, '비욘드디자인',     '56다 7890', '1t',   '전시 소품',      false, 'booked'),
  ('dr-smf-in-5', 'e-2026-smf', 'dock-h7-5', 'in', DATE '2026-08-11', 16, 2, '네오로지스',       '78라 1234', '5t',   '전시 장비',      true,  'booked')
ON CONFLICT (id) DO NOTHING;

-- ── 시드: 반출(2026-08-15) 예약 ────────────────────────────────────────
INSERT INTO dock_reservation
  (id, event_id, dock_id, direction, reserve_date, start_hour, span, company_name, vehicle_no, vehicle_weight, item, forklift, tone) VALUES
  ('dr-smf-out-1', 'e-2026-smf', 'dock-h7-1', 'out', DATE '2026-08-15', 14, 3, '(주)공간디자인', '12가 3456', '5t',      '철거 자재', true,  'booked'),
  ('dr-smf-out-2', 'e-2026-smf', 'dock-h7-3', 'out', DATE '2026-08-15', 15, 2, NULL,             NULL,        '5t',      '중량물 우선(5t↑)', false, 'priority'),
  ('dr-smf-out-3', 'e-2026-smf', 'dock-h7-4', 'out', DATE '2026-08-15', 17, 3, '네오로지스',     '78라 1234', '11t 이상', '철거 장비', true,  'booked')
ON CONFLICT (id) DO NOTHING;
