import type { Enemy, Level, Platform } from './types';

/** All coordinates are world pixels. The smallest required jump is never over 65px. */
export function createLevel(): Level {
  const platforms: Platform[] = [];
  const road = (x: number, w: number, y = 360, kind: Platform['kind'] = 'road') => {
    platforms.push({ x, y, w, h: 600 - y, kind });
  };
  road(0, 920);
  road(975, 535);
  road(1575, 765);
  road(2400, 570);
  road(3035, 815);
  road(3910, 680);
  road(4650, 510);

  // The industrial climb doubles as a forgiving wall-jump tutorial.
  for (let i = 0; i < 5; i++) road(5160 + i * 190, 190, 318 - i * 42, 'metal');
  for (let i = 0; i < 4; i++) road(6110 + i * 190, 190, 192 + i * 42, 'metal');
  road(6870, 690);
  road(7620, 490);
  road(8150, 850);

  // Optional high ground and health routes; none block the main route.
  const ledges: [number, number, number][] = [
    [440, 315, 95], [570, 272, 120], [1110, 318, 105], [1810, 315, 130],
    [1980, 270, 125], [2510, 317, 100], [2660, 273, 115], [3280, 315, 120],
    [3450, 270, 130], [4060, 317, 120], [4250, 276, 120],
    [4870, 315, 120], [7100, 313, 140], [7790, 314, 135],
  ];
  ledges.forEach(([x, y, w]) => platforms.push({ x, y, w, h: 12, kind: 'ledge' }));

  const enemies: Enemy[] = [];
  const spawn = (kind: Enemy['kind'], x: number, floorY: number, phase = 0) => {
    const h = kind === 'drone' ? 18 : kind === 'walker' ? 22 : 25;
    const hp = kind === 'turret' ? 6 : kind === 'walker' ? 4 : 3;
    enemies.push({ id: enemies.length + 1, kind, x, y: floorY - h, w: 22, h,
      hp, maxHp: hp, vx: 0, vy: 0, facing: -1, originX: x, originY: floorY - h,
      timer: 0.9 + (enemies.length % 4) * 0.24, phase, flash: 0 });
  };
  spawn('walker', 360, 360);
  spawn('walker', 740, 360);
  spawn('drone', 1090, 301, 1);
  spawn('turret', 1370, 360);
  spawn('walker', 1700, 360);
  spawn('drone', 2060, 310, 3);
  spawn('turret', 2260, 360);
  spawn('walker', 2510, 360);
  spawn('drone', 2790, 312, 5);
  spawn('turret', 3130, 360);
  spawn('walker', 3400, 360);
  spawn('drone', 3710, 305, 7);
  spawn('walker', 4080, 360);
  spawn('turret', 4440, 360);
  spawn('walker', 4970, 360);
  spawn('turret', 5300, 318);
  spawn('drone', 5440, 224, 9);
  spawn('walker', 5590, 234);
  spawn('turret', 5860, 192);
  spawn('drone', 6060, 95, 11);
  spawn('walker', 6230, 192);
  spawn('turret', 6440, 234);
  spawn('drone', 6640, 235, 13);
  spawn('walker', 7060, 360);
  spawn('turret', 7380, 360);
  spawn('drone', 7810, 300, 15);
  spawn('walker', 7970, 360);

  return {
    width: 9000, height: 600, platforms,
    hazards: [
      { x: 1200, y: 350, w: 34, h: 10 },
      { x: 2580, y: 350, w: 38, h: 10 },
      { x: 3530, y: 350, w: 38, h: 10 },
      { x: 4320, y: 350, w: 34, h: 10 },
      { x: 7150, y: 350, w: 40, h: 10 },
      { x: 7770, y: 350, w: 34, h: 10 },
    ],
    checkpoints: [
      { x: 64, y: 334, label: 'HIGHWAY ENTRANCE' },
      { x: 4750, y: 334, label: 'INDUSTRIAL SECTOR' },
      { x: 8210, y: 334, label: 'COLOSSUS GATE' },
    ],
    signs: [
      { x: 160, y: 300, text: 'J / X  FIRE · HOLD TO CHARGE' },
      { x: 620, y: 294, text: 'SHIFT / C  DASH' },
      { x: 840, y: 287, text: 'SPACE / Z  JUMP' },
      { x: 1700, y: 245, text: 'KEEP MOVING, HUNTER' },
      { x: 3150, y: 288, text: 'HOLD FIRE: MAX CHARGE' },
      { x: 4730, y: 286, text: 'CHECKPOINT 01' },
      { x: 5010, y: 248, text: 'JUMP AGAINST WALLS TO CLIMB' },
      { x: 5840, y: 85, text: 'SKYLINE REACTOR' },
      { x: 7260, y: 284, text: 'GUARDIAN SIGNAL DETECTED' },
      { x: 8160, y: 281, text: 'CHECKPOINT 02' },
    ],
    enemies, bossX: 8840,
    arena: { x: 8616, y: 190, w: 384, h: 170 },
  };
}
