/*
 * 홀 ID → 실측 홀 도면(크롤 JPG) URL + 전시 바닥면 캘리브레이션.
 * 에셋은 docs/assets/floorplans 크롤본을 public/media/floorplans 로 빌드 내장(V46 포스터 패턴).
 * 매핑 불가한 홀은 null — 캔버스는 기존 다크 서피스만 렌더(FloorplanCanvas onError 폴백과 동일).
 *
 * FLOOR_REGIONS: 도면 이미지 안에서 전시 바닥면(1전시장 연노랑·2전시장 라임그린 채색 영역)이
 * 차지하는 사각 영역의 이미지 분율 [x0, y0, x1, y1]. 도면 JPG는 여백·범례·미니맵을 포함하므로
 * 이 영역을 홀 좌표계(0,0~W,H m)에 정렬해야 부스가 "평면도 안"에 배치돼 보인다(소유자 지시 2026-07-14).
 * 값은 색상 블롭 자동 측정(최대 연결 성분) 산출 — 도면 교체 시 재측정 필요.
 */
export type FloorRegion = [number, number, number, number];

const FLOOR_REGIONS: Record<string, FloorRegion> = {
  H1: [0.1583, 0.4015, 0.9167, 0.7956],
  H2: [0.0667, 0.3723, 0.8944, 0.8029],
  H3: [0.0667, 0.3759, 0.8972, 0.8102],
  H4: [0.0667, 0.3759, 0.8972, 0.8066],
  H5: [0.0528, 0.4416, 0.9028, 0.8686],
  H6: [0.3222, 0.2162, 0.6917, 0.8176],
  H7: [0.2583, 0.2027, 0.7306, 0.8547],
  H8: [0.275, 0.5034, 0.7194, 0.8446],
  H9: [0.2833, 0.2061, 0.7111, 0.8581],
  H10: [0.2778, 0.5068, 0.7194, 0.8581],
};

function hallKey(hallId: string | null | undefined): string | null {
  const m = /^H(\d+)$/i.exec((hallId ?? '').trim());
  return m ? `H${Number(m[1])}` : null;
}

export function hallFloorplanUrl(hallId: string | null | undefined): string | null {
  const key = hallKey(hallId);
  if (!key || !(key in FLOOR_REGIONS)) return null;
  return `/media/floorplans/hall${key.slice(1)}.jpg`;
}

/** 도면 이미지 내 전시 바닥면 분율 영역 — 캔버스가 이 영역을 홀 사각형에 정렬한다. */
export function hallFloorRegion(hallId: string | null | undefined): FloorRegion | null {
  const key = hallKey(hallId);
  return key ? FLOOR_REGIONS[key] ?? null : null;
}
