#!/usr/bin/env node
/**
 * Jednorázové přihlášení ke Gemini.
 *   node scripts/prihlaseni.mjs [--prohlizec chrome] [--limit 20]
 *
 * Otevře okno prohlížeče na gemini.google.com a ČEKÁ, dokud se uživatel nepřihlásí.
 * Heslo zadává uživatel sám, přímo do přihlašovací stránky Googlu — skript ho
 * nevidí a nikam ho neukládá. Ukládá se jen přihlášení, do profilu prohlížeče
 * (~/.vojtacode-image/profil-prohlizece), takže se to dělá jednou.
 *
 * Značky na stdout: CEKAM_NA_PRIHLASENI / LOGGED_IN / TIMEOUT
 *
 * Postup pro Clauda:
 *   1) spusť tenhle skript NA POZADÍ
 *   2) až vypíše CEKAM_NA_PRIHLASENI, řekni uživateli, ať se v okně přihlásí
 *      a napíše ti „hotovo"
 *   3) když napíše „hotovo", mrkni do výstupu skriptu — je tam LOGGED_IN?
 *      Když ano, hotovo. Když ne, ještě se nepřihlásil, tak počkej.
 */
import { otevriProhlizec, jePrihlasen, PROFIL_PROHLIZECE, GEMINI, PROHLIZECE, vyberProhlizec, ulozProhlizec, nactiNastaveni } from './lib/spolecne.mjs';

const argv = process.argv.slice(2);
function prepinac(jmeno, vychozi) {
  const i = argv.indexOf('--' + jmeno);
  return i >= 0 && argv[i + 1] && !argv[i + 1].startsWith('--') ? argv[i + 1] : vychozi;
}
const zvoleny = prepinac('prohlizec', null);
const LIMIT_MINUT = Number(prepinac('limit', '20')) || 20;

// TVRDÁ ZASTÁVKA: prohlížeč musí vybrat ČLOVĚK, ne skript.
// Bez tohohle vyberProhlizec() tiše spadne na Chrome a uživatel se ke slovu
// vůbec nedostane (stalo se 1. 8. při natáčení videa 03).
if (!zvoleny && !nactiNastaveni().prohlizec) {
  console.error('CHYBI_VOLBA_PROHLIZECE: uživatel ještě nevybral prohlížeč.');
  console.error('');
  console.error('Pro Clauda: NEPOKRAČUJ. Nejdřív zjisti, co uživatel má:');
  console.error('    node scripts/prohlizece.mjs');
  console.error('vypiš mu možnosti, NECH HO VYBRAT a volbu zapiš:');
  console.error('    node scripts/prohlizece.mjs --nastav <volba>');
  console.error('Teprve pak spusť přihlášení znovu. Nehádej za něj.');
  process.exit(2);
}

// Když uživatel prohlížeč vybral tady, ulož volbu — ať ji generování už zná.
if (zvoleny) ulozProhlizec(zvoleny.toLowerCase());
const klic = vyberProhlizec(zvoleny ? zvoleny.toLowerCase() : undefined);

console.log('=== Přihlášení ke Gemini ===');
console.log(`Prohlížeč: ${PROHLIZECE[klic].nazev}`);
console.log(`Profil:    ${PROFIL_PROHLIZECE}`);

const ctx = await otevriProhlizec({ viditelny: true, prohlizec: klic });
const page = ctx.pages()[0] ?? (await ctx.newPage());

try {
  await page.goto(GEMINI, { waitUntil: 'domcontentloaded', timeout: 60000 });

  if (await jePrihlasen(page)) {
    console.log('LOGGED_IN: už jsi přihlášený, nic dělat nemusíš.');
    process.exit(0);
  }

  console.log(`CEKAM_NA_PRIHLASENI: okno je otevřené, čekám až ${LIMIT_MINUT} minut.`);
  const konec = Date.now() + LIMIT_MINUT * 60 * 1000;
  let tik = 0;
  for (;;) {
    if (await jePrihlasen(page)) break;
    if (Date.now() > konec) {
      console.error(`\nTIMEOUT: přihlášení nedoběhlo do ${LIMIT_MINUT} minut. Spusť skript znovu.`);
      process.exit(1);
    }
    if (++tik % 15 === 0) {
      console.log(`  …čekám (zbývá ~${Math.ceil((konec - Date.now()) / 60000)} min)`);
    }
    await page.waitForTimeout(2000);
  }

  console.log('\nLOGGED_IN: přihlášeno a uloženo.');
  console.log('Od teď generování jede bez přihlašování.');
} catch (e) {
  const hlaska = String(e?.message || e);
  if (/has been closed|Target closed|browser has been closed/i.test(hlaska)) {
    console.error('\nZAVRENO: okno prohlížeče se zavřelo, než bylo přihlášení hotové.');
    console.error('Nic se nerozbilo — spusť skript znovu a okno nezavírej,');
    console.error('dokud se nenapíše LOGGED_IN.');
  } else {
    console.error('\nCHYBA: ' + hlaska);
  }
  process.exitCode = 1;
} finally {
  await ctx.close().catch(() => {});
}
