// data.jsx — game catalog for the SoftLAN launcher mock
// Each game has: id, title, size (GB), version (date), description, state, players (min-max), tags, cover (color pair + optional accent shape)
// state: 'installed' | 'local' | 'none'  (local = downloaded but not installed yet)

const GAMES = [
  {
    id: '8bitarmies', title: '8-Bit Armies', size: 1.9, version: '2016.10.24',
    desc: "A fast-paced retro-styled RTS with bright voxel armies, three factions, and zero patience for slow players. Tank-rush, build queues, and a campaign that doesn't waste your time.",
    state: 'installed', players: '1–8', tags: ['RTS', 'Multiplayer', 'LAN'],
    cover: { c1: '#f59e0b', c2: '#b91c1c', accent: '#fde047', mood: 'arcade' },
  },
  {
    id: 'aoe2hd', title: 'Age of Empires II (HD)', size: 8.6, version: '2018.01.31',
    desc: "The HD remaster of the strategy classic. Lead one of thirteen civilizations from the dark ages through the imperial age, and finally settle who actually deserved that wonder.",
    state: 'local', players: '1–8', tags: ['RTS', 'Historical', 'LAN'],
    cover: { c1: '#7c2d12', c2: '#1c1917', accent: '#fbbf24', mood: 'gothic' },
  },
  {
    id: 'avp', title: 'Aliens vs. Predator', size: 35.0, version: '2019.10.01',
    desc: "Three campaigns, three nightmares. Be the alien stalking the dark, the predator hunting both, or the marine just trying to make it home with a working flashlight.",
    state: 'downloading', progress: 0.32, speed: 49.4, peers: 5, players: '2–16', tags: ['FPS', 'Horror', 'Multiplayer'],
    cover: { c1: '#064e3b', c2: '#020617', accent: '#34d399', mood: 'dark' },
  },
  {
    id: 'amongus', title: 'Among Us', size: 0.3, version: '2021.11.05',
    desc: "Crewmates fix the ship. Impostors sabotage it and vent through walls. Friendships are tested. The orange one is always sus.",
    state: 'installed', players: '4–15', tags: ['Social Deduction', 'Casual'],
    cover: { c1: '#ef4444', c2: '#1e3a8a', accent: '#fef08a', mood: 'playful' },
  },
  {
    id: 'bf1942', title: 'Battlefield 1942', size: 7.8, version: '2016.01.30',
    desc: "The original Battlefield. WWII on land, sea, and air across 16 maps. The mod scene basically reinvented PC gaming on top of this engine.",
    state: 'installed', players: '2–64', tags: ['FPS', 'Vehicles', 'LAN'],
    cover: { c1: '#92400e', c2: '#1c1917', accent: '#facc15', mood: 'war' },
  },
  {
    id: 'bf2', title: 'Battlefield 2 Complete', size: 8.0, version: '2021.12.27',
    desc: "Modern combat with commander mode, squads, and the kind of jet-vs-jet duels you tell stories about for a decade.",
    state: 'local', players: '2–64', tags: ['FPS', 'Vehicles', 'Tactical'],
    cover: { c1: '#3f3f46', c2: '#0a0a0a', accent: '#22d3ee', mood: 'tactical' },
  },
  {
    id: 'blazerush', title: 'BlazeRush', size: 1.3, version: '2021.12.27',
    desc: "Top-down arcade racing with no fuel, no health bar, and absolutely no brakes. Ram, boost, win.",
    state: 'none', players: '1–8', tags: ['Racing', 'Arcade'],
    cover: { c1: '#f97316', c2: '#7c2d12', accent: '#fde047', mood: 'arcade' },
  },
  {
    id: 'cod2', title: 'Call of Duty 2', size: 7.0, version: '2016.09.22',
    desc: "WWII shooter — Russian, British and American campaigns, plus the multiplayer that defined LAN parties for years.",
    state: 'installed', players: '2–32', tags: ['FPS', 'War'],
    cover: { c1: '#57534e', c2: '#1c1917', accent: '#fbbf24', mood: 'war' },
  },
  {
    id: 'cod4mw', title: 'Call of Duty 4: Modern Warfare', size: 13.0, version: '2016.09.21',
    desc: "The shooter that flipped the genre to modern combat and minted a generation of esports careers. All Ghillied Up still holds up.",
    state: 'local', players: '2–32', tags: ['FPS', 'Modern'],
    cover: { c1: '#525252', c2: '#0a0a0a', accent: '#84cc16', mood: 'tactical' },
  },
  {
    id: 'coduo', title: 'Call of Duty: United Offensive', size: 3.8, version: '2018.09.08',
    desc: "Expansion to the original CoD. Battle of the Bulge, Sicily, Kursk. Adds tanks, B-17 sequences, and the flamethrower nobody asked for but everybody loved.",
    state: 'none', players: '2–32', tags: ['FPS', 'Expansion'],
    cover: { c1: '#78716c', c2: '#292524', accent: '#fb923c', mood: 'war' },
  },
  {
    id: 'ra3', title: 'C&C: Red Alert 3', size: 8.2, version: '2018.04.12',
    desc: "Cold War alt-history RTS. Soviets, Allies, and the Empire of the Rising Sun — every cutscene live-action and absolutely deranged.",
    state: 'installed', players: '1–6', tags: ['RTS', 'Co-op'],
    cover: { c1: '#991b1b', c2: '#450a0a', accent: '#fde047', mood: 'propaganda' },
  },
  {
    id: 'cncgen', title: 'C&C Generals: Zero Hour', size: 2.1, version: '2017.11.15',
    desc: "Modern-warfare RTS expansion with generals challenges. USA, China, GLA — pick your asymmetry and rush something.",
    state: 'local', players: '1–8', tags: ['RTS', 'Modern'],
    cover: { c1: '#a16207', c2: '#422006', accent: '#facc15', mood: 'war' },
  },
  {
    id: 'cs', title: 'Counter-Strike 1.6', size: 0.7, version: '2014.01.21',
    desc: "The 1.6 build still everyone insists was the peak. Terrorists vs Counter-Terrorists, AWP camping, de_dust2.",
    state: 'installed', players: '2–32', tags: ['FPS', 'Competitive', 'LAN'],
    cover: { c1: '#1e40af', c2: '#0c1f3a', accent: '#fbbf24', mood: 'tactical' },
  },
  {
    id: 'css', title: 'Counter-Strike: Source', size: 4.3, version: '2014.10.23',
    desc: "CS reborn on the Source engine. Same maps, same rules, with physics that lets the molotovs work properly.",
    state: 'installed', players: '2–32', tags: ['FPS', 'Competitive'],
    cover: { c1: '#1d4ed8', c2: '#0c1f3a', accent: '#f59e0b', mood: 'tactical' },
  },
  {
    id: 'cube2', title: 'Cube 2: Sauerbraten', size: 0.4, version: '2013.09.20',
    desc: "Open-source arena FPS with in-game level editing. Fast, free, and one of those things every LAN party always had a copy of.",
    state: 'none', players: '2–16', tags: ['FPS', 'Open Source'],
    cover: { c1: '#dc2626', c2: '#7f1d1d', accent: '#f1f5f9', mood: 'arcade' },
  },
  {
    id: 'doom3', title: 'Doom 3', size: 2.2, version: '2012.01.31',
    desc: "Sci-fi horror reboot of the franchise. Mars Research Facility, demonic incursion, the shotgun that started a flashlight debate.",
    state: 'local', players: '2–16', tags: ['FPS', 'Horror'],
    cover: { c1: '#7f1d1d', c2: '#000000', accent: '#f97316', mood: 'dark' },
  },
  {
    id: 'l4d2', title: 'Left 4 Dead 2', size: 6.5, version: '2020.08.15',
    desc: "Co-op zombie survival with the AI Director rewriting every campaign run. Bring four friends or four strangers; the chainsaw works the same.",
    state: 'installed', players: '1–8', tags: ['Co-op', 'FPS', 'Horror'],
    cover: { c1: '#15803d', c2: '#052e16', accent: '#fef08a', mood: 'horror' },
  },
  {
    id: 'minecraft', title: 'Minecraft', size: 1.0, version: '2024.03.01',
    desc: "Infinite voxel sandbox. Build, mine, survive, get blown up by a creeper. The LAN button is right there.",
    state: 'installed', players: '2–100', tags: ['Sandbox', 'Survival', 'LAN'],
    cover: { c1: '#15803d', c2: '#7c2d12', accent: '#fde68a', mood: 'sandbox' },
  },
  {
    id: 'portal2', title: 'Portal 2', size: 11.0, version: '2014.01.01',
    desc: "Puzzle-shooter sequel with a full co-op campaign — two players, two portals each, infinite ways to get GLaDOS to insult you.",
    state: 'local', players: '1–2', tags: ['Puzzle', 'Co-op'],
    cover: { c1: '#ea580c', c2: '#1e293b', accent: '#22d3ee', mood: 'tech' },
  },
  {
    id: 'quake3', title: 'Quake III Arena', size: 0.5, version: '2010.08.15',
    desc: "Arena FPS in its most distilled form. Rocket jumps, rail-gun duels, and a netcode that's still the benchmark.",
    state: 'downloading', progress: 0.71, speed: 12.8, peers: 3, players: '2–16', tags: ['FPS', 'Arena', 'LAN'],
    cover: { c1: '#7f1d1d', c2: '#0a0a0a', accent: '#fbbf24', mood: 'dark' },
  },
  {
    id: 'starcraft', title: 'StarCraft: Brood War', size: 1.2, version: '2018.04.16',
    desc: "Sci-fi RTS — Terran, Zerg, Protoss. Still played at the highest level decades later for a reason.",
    state: 'installed', players: '1–8', tags: ['RTS', 'Sci-Fi'],
    cover: { c1: '#1e3a8a', c2: '#172554', accent: '#22d3ee', mood: 'scifi' },
  },
  {
    id: 'tf2', title: 'Team Fortress 2', size: 22.0, version: '2023.06.18',
    desc: "Class-based shooter with nine archetypes, absurd hats, and a meta with more history than most actual sports.",
    state: 'local', players: '2–32', tags: ['FPS', 'Class-based'],
    cover: { c1: '#b45309', c2: '#7c2d12', accent: '#fbbf24', mood: 'cartoon' },
  },
  {
    id: 'ut2k4', title: 'Unreal Tournament 2004', size: 5.2, version: '2012.06.01',
    desc: "Arena shooter at maximum velocity. Onslaught, Assault, Bombing Run — vehicles, jump boots, the announcer screaming HEADSHOT.",
    state: 'none', players: '2–32', tags: ['FPS', 'Arena'],
    cover: { c1: '#854d0e', c2: '#422006', accent: '#fde047', mood: 'arena' },
  },
  {
    id: 'warcraft3', title: 'Warcraft III: TFT', size: 1.3, version: '2018.03.25',
    desc: "Hero-driven RTS whose custom-game scene birthed Dota, tower defense, and at least three other genres that ate the industry.",
    state: 'installed', players: '1–12', tags: ['RTS', 'Fantasy'],
    cover: { c1: '#a16207', c2: '#422006', accent: '#fbbf24', mood: 'fantasy' },
  },
];

// Helpers
const fmtSize = (gb) => gb < 1 ? `${Math.round(gb * 1024)} MB` : `${gb.toFixed(1)} GB`;
const STATE_META = {
  installed:   { label: 'Installed',   dot: '#22c55e' },
  local:       { label: 'Local',       dot: '#f59e0b' },
  downloading: { label: 'Downloading', dot: 'var(--accent)' },
  none:        { label: '',            dot: 'transparent' },
};
const ACTION_FOR_STATE = {
  installed:   { label: 'Play',        kind: 'play'        },
  local:       { label: 'Install',     kind: 'install'     },
  downloading: { label: 'Downloading', kind: 'downloading' },
  none:        { label: 'Download',    kind: 'download'    },
};

// Format helpers for download UI
const fmtSpeed = (mbps) => mbps >= 100 ? `${Math.round(mbps)} MB/s` : `${mbps.toFixed(1)} MB/s`;
const fmtSpeedShort = (mbps) => `${Math.round(mbps)} MB/s`;
const fmtBytes = (gb) => {
  if (gb < 1) return `${Math.round(gb * 1024)} MB`;
  // No trailing zeros: 35 GB, 11.4 GB, 2.35 GB
  if (gb >= 10) return `${gb.toFixed(1).replace(/\.0$/,'')} GB`;
  return `${gb.toFixed(2).replace(/0$/,'').replace(/\.$/,'')} GB`;
};
const fmtEta = (sec) => {
  if (!isFinite(sec) || sec <= 0) return '—';
  if (sec < 60) return `${Math.round(sec)} s`;
  const m = Math.round(sec / 60);
  if (m < 60) return `${m} min`;
  return `${Math.floor(m/60)} h ${m%60} min`;
};

const isLocalish = (s) => s === 'installed' || s === 'local' || s === 'downloading';
const countByFilter = (games) => ({
  all:       games.length,
  local:     games.filter(g => isLocalish(g.state)).length,
  installed: games.filter(g => g.state === 'installed').length,
});

const filterGames = (games, key) => {
  if (key === 'all') return games;
  if (key === 'local') return games.filter(g => isLocalish(g.state));
  if (key === 'installed') return games.filter(g => g.state === 'installed');
  return games;
};

// Storage figures (mock)
const STORAGE = {
  installed: 78.4,  // GB
  local: 41.2,
  free: 384.1,
  total: 512,
};

window.GAMES = GAMES;
window.STATE_META = STATE_META;
window.ACTION_FOR_STATE = ACTION_FOR_STATE;
window.countByFilter = countByFilter;
window.filterGames = filterGames;
window.fmtSize = fmtSize;
window.fmtSpeed = fmtSpeed;
window.fmtSpeedShort = fmtSpeedShort;
window.fmtBytes = fmtBytes;
window.fmtEta = fmtEta;
window.STORAGE = STORAGE;
