import type { BoothDto, LayoutDto } from '../../api/types';

/*
 * Degraded 샘플 배치 — 백엔드 매퍼 501(NOT_IMPLEMENTED) 시에만 캔버스 시연용.
 * ★ 실데이터 아님. 계약 shape과 동일 구조로 만들어 실 API 연결 시 그대로 대체된다.
 * 홀 126×90m 로컬 좌표. 부스 3×3m/6×3m 격자 배치.
 */
/**
 * 저장된 배치안이 없는 홀(GET 404)용 빈 배치 — 에러 화면 대신 "AI 자동배치로 시작" 상태로 진입.
 * (2026-07-14 소유자 "도면을 불러오지 못했습니다" 제보 해소 — 404는 결함이 아니라 신규 시작점.)
 */
export function emptyLayout(eventId: string, hallId: string): LayoutDto {
  return {
    layoutId: `new-${eventId}-${hallId}`,
    eventId,
    hallId,
    version: 0,
    name: '새 배치안',
    status: 'draft',
    booths: [],
    summary: {
      boothCount: 0,
      targetBoothCount: 0,
      salesAreaM2: 0,
      minAisleWidthM: 0,
      violationBlock: 0,
      violationWarn: 0,
    },
    updatedAt: new Date().toISOString(),
  };
}

export function sampleLayout(eventId: string, hallId: string): LayoutDto {
  const booths: BoothDto[] = [];
  const cols = 12;
  const rows = 6;
  const bw = 6;
  const bh = 3;
  const gapX = 4;
  const gapY = 6;
  const originX = 10;
  const originY = 12;

  let idx = 0;
  for (let r = 0; r < rows; r += 1) {
    for (let c = 0; c < cols; c += 1) {
      const x = originX + c * (bw + gapX);
      const y = originY + r * (bh + gapY);
      const rowLetter = String.fromCharCode(65 + r); // A, B, C…
      const no = `${rowLetter}-${101 + c}`;
      const premium = r === 2 && c >= 4 && c <= 6;
      booths.push({
        boothId: `sample-${idx}`,
        boothNo: no,
        type: premium ? 'premium' : 'basic',
        polygon: [
          [x, y],
          [x + bw, y],
          [x + bw, y + bh],
          [x, y + bh],
          [x, y],
        ],
        sizeM: [bw, bh],
        heightM: 4.2,
        floorLoadTPerM2: 3.0,
        assignedCompanyName: idx % 3 === 0 ? '(주)한빛로보틱스' : null,
        premium,
      });
      idx += 1;
    }
  }

  return {
    layoutId: 'sample-layout',
    eventId,
    hallId,
    version: 3,
    name: '배치안 B (샘플)',
    status: 'draft',
    booths,
    summary: {
      boothCount: booths.length,
      targetBoothCount: 510,
      salesAreaM2: booths.length * bw * bh,
      minAisleWidthM: 3.2,
      violationBlock: 2,
      violationWarn: 3,
    },
    updatedAt: new Date().toISOString(),
  };
}
