#!/usr/bin/env node
// scripts/launch.js — bin-скрипт `valencyviktor`.
//
// Запускает Go-бинарь TUI, который сам поднимет Python-прокси фоном
// (без отдельного окна на Windows), дождётся /health и откроет интерфейс.
//
// By Valency Labs.

'use strict';

const fs = require('fs');
const path = require('path');
const { spawn } = require('child_process');

const ROOT = path.resolve(__dirname, '..');
const BIN_DIR = path.join(ROOT, 'bin');
// Python-сорцы прокси лежат в корне пакета — viktor_valency/ + requirements.txt
const PY_DIR = ROOT;

const isWindows = process.platform === 'win32';
const exeName = isWindows ? 'viktor-tui.exe' : 'viktor-tui';
const tuiPath = path.join(BIN_DIR, exeName);

if (!fs.existsSync(tuiPath)) {
  console.error('[viktor-valency] TUI бинарь не найден:', tuiPath);
  console.error('  выполни postinstall:  npm rebuild valency-viktor');
  console.error('  или собери вручную:');
  console.error(`    cd tui && go build -o ../bin/${exeName} ./cmd/viktor-tui/`);
  process.exit(2);
}

// Авто-выбор venv-Python для прокси, если есть
let pyExe = '';
const venvPy = isWindows
  ? path.join(PY_DIR, '.venv', 'Scripts', 'python.exe')
  : path.join(PY_DIR, '.venv', 'bin', 'python');
if (fs.existsSync(venvPy)) {
  pyExe = venvPy;
}

const args = process.argv.slice(2);
const env = { ...process.env };
if (!env.VIKTOR_VALENCY_HOME) env.VIKTOR_VALENCY_HOME = PY_DIR;
if (pyExe && !env.VIKTOR_VALENCY_PYTHON) env.VIKTOR_VALENCY_PYTHON = pyExe;

const child = spawn(tuiPath, args, {
  stdio: 'inherit',
  env,
  // не открывать новое окно на Windows — TUI рисуется в текущем терминале
  windowsHide: true,
});

child.on('exit', (code, signal) => {
  if (signal) process.kill(process.pid, signal);
  else process.exit(code ?? 0);
});

child.on('error', (err) => {
  console.error('[viktor-valency] не смог запустить TUI:', err.message);
  process.exit(2);
});
