#!/usr/bin/env node
/**
 * Prvotní nastavení skillu — spustit JEDNOU.
 *   node scripts/nastaveni.mjs
 *
 * 1) ověří verzi Node.js
 * 2) nainstaluje Playwright lokálně do složky skillu (neplete se do globálního npm)
 * 3) stáhne Chromium (jen když v systému není Chrome ani Edge)
 * 4) připraví datovou složku
 *
 * Nepřihlašuje — to dělá prihlaseni.mjs.
 */
import fs from 'node:fs';
import path from 'node:path';
import os from 'node:os';
import { spawn } from 'node:child_process';
import { KOREN_SKILLU, DATOVA_SLOZKA, vychoziVystup } from './lib/spolecne.mjs';

const je_windows = process.platform === 'win32';

function spust(prikaz, argumenty, popis) {
  return new Promise((resolve) => {
    const cely = `${prikaz} ${argumenty.join(' ')}`;
    console.log(`\n▸ ${popis}`);
    console.log(`  ${cely}`);
    // npm/npx jsou na Windows dávkové soubory → bez shellu spawn skončí na EINVAL.
    // Shell tedy potřebujeme, ale příkaz předáváme jako JEDEN string bez pole
    // argumentů — jinak Node hlásí DEP0190. Argumenty jsou tady pevně dané
    // v kódu, nic z nich nepřichází od uživatele.
    try {
      const p = spawn(cely, { cwd: KOREN_SKILLU, stdio: 'inherit', shell: true });
      p.on('close', (kod) => resolve(kod === 0));
      p.on('error', (e) => { console.error(`  ${e.message}`); resolve(false); });
    } catch (e) {
      console.error(`  ${e.message}`);
      resolve(false);
    }
  });
}

/** Je v systému Chrome nebo Edge? Pak nemusíme stahovat 150 MB Chromia. */
function maSystemovyProhlizec() {
  const cesty = je_windows
    ? [
        'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
        'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe',
        path.join(os.homedir(), 'AppData\\Local\\Google\\Chrome\\Application\\chrome.exe'),
        'C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe',
        'C:\\Program Files\\Microsoft\\Edge\\Application\\msedge.exe'
      ]
    : [
        '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
        '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge'
      ];
  return cesty.some((c) => { try { return fs.existsSync(c); } catch (e) { return false; } });
}

console.log('=== skill-image-vojtacode — prvotní nastavení ===');
console.log(`Složka skillu: ${KOREN_SKILLU}`);
console.log(`Platforma:     ${process.platform}`);

// 1) Node.js
const hlavniVerze = Number(process.versions.node.split('.')[0]);
console.log(`\n▸ Node.js ${process.versions.node}`);
if (hlavniVerze < 18) {
  console.error(`CHYBA: potřebuješ Node.js 18 nebo novější (máš ${process.versions.node}).`);
  console.error('Stáhni ho na https://nodejs.org a spusť tento skript znovu.');
  process.exit(1);
}
console.log('  OK');

// 2) Playwright — v balíku je už přibalený, stahovat se nemá co
const jePlaywright = fs.existsSync(path.join(KOREN_SKILLU, 'node_modules', 'playwright'));
if (jePlaywright) {
  console.log('\n▸ Playwright je přibalený v balíku — nic se nestahuje.');
} else {
  console.log('\n▸ Playwright v balíku chybí (nekompletní rozbalení?) — doinstaluji.');
  const ok = await spust('npm', ['install', '--no-audit', '--no-fund'], 'Instaluji Playwright');
  if (!ok) {
    console.error('\nCHYBA: npm install neprošel.');
    console.error('Zkontroluj, že máš npm (přijde s Node.js) a připojení k internetu.');
    console.error('Nebo rozbal zip znovu — Playwright v něm má být přibalený ve složce node_modules.');
    process.exit(1);
  }
}

// 3) Prohlížeč — systémový Chrome/Edge stačí, nic se nestahuje
if (maSystemovyProhlizec()) {
  console.log('\n▸ Systémový Chrome/Edge nalezen — žádný prohlížeč se stahovat nebude.');
} else {
  console.log('\n▸ Chrome ani Edge v systému nenalezen.');
  const ok = await spust('npx', ['playwright', 'install', 'chromium'], 'Stahuji Chromium (~150 MB, jednorázově)');
  if (!ok) {
    console.error('\nVAROVÁNÍ: stažení Chromia neprošlo.');
    console.error('Nainstaluj Google Chrome nebo Edge — skill je umí použít bez jakéhokoliv stahování.');
    process.exit(1);
  }
}

// 4) složky
fs.mkdirSync(DATOVA_SLOZKA, { recursive: true });
fs.mkdirSync(vychoziVystup(), { recursive: true });
console.log(`\n▸ Datová složka:  ${DATOVA_SLOZKA}`);
console.log(`▸ Obrázky půjdou: ${vychoziVystup()}`);

console.log('\n=== NASTAVENO ===');
console.log('Další krok — přihlášení k Google účtu (otevře se okno prohlížeče):');
console.log(`  node "${path.join(KOREN_SKILLU, 'scripts', 'prihlaseni.mjs')}"`);
