/**
 * Build Linux release artifacts.
 *
 * AppImage packaging uses Linux tooling (mksquashfs). Running it from
 * Windows PowerShell reaches linux-unpacked, then fails while creating
 * the AppImage. Build from Linux/WSL instead.
 */
import { spawnSync } from 'node:child_process';
import fs from 'node:fs';
import path from 'node:path';
import process from 'node:process';

function run(command, args) {
  const result = spawnSync(command, args, {
    stdio: 'inherit',
    shell: process.platform === 'win32',
  });

  if (result.status !== 0) {
    process.exit(result.status ?? 1);
  }
}

/** electron-builder для AppImage x64 часто даёт `x86_64` в имени — выравниваем под feed. */
function normalizeLinuxReleaseNames() {
  const releaseDir = path.resolve('release');
  if (!fs.existsSync(releaseDir)) return;

  for (const name of fs.readdirSync(releaseDir)) {
    if (!name.includes('x86_64')) continue;
    const from = path.join(releaseDir, name);
    const to = path.join(releaseDir, name.replaceAll('x86_64', 'x64'));
    if (from !== to && !fs.existsSync(to)) {
      fs.renameSync(from, to);
      console.log(`[pack:linux] renamed ${name} -> ${path.basename(to)}`);
    }
  }

  for (const ymlName of fs.readdirSync(releaseDir)) {
    if (!ymlName.startsWith('latest-linux') || !ymlName.endsWith('.yml')) continue;
    const ymlPath = path.join(releaseDir, ymlName);
    const text = fs.readFileSync(ymlPath, 'utf8');
    const next = text.replaceAll('x86_64', 'x64');
    if (next !== text) {
      fs.writeFileSync(ymlPath, next);
      console.log(`[pack:linux] patched ${ymlName} (x86_64 -> x64)`);
    }
  }
}

if (process.platform === 'win32') {
  console.error(
    [
      '[pack:linux] AppImage нельзя собрать напрямую из Windows PowerShell.',
      'Запустите команду внутри Linux/WSL из папки проекта:',
      '',
      '  cd /mnt/d/Work/my_projects/dnd_project/dnd_player',
      '  npm ci',
      '  npm run pack:linux',
    ].join('\n'),
  );
  process.exit(1);
}

run('npm', ['run', 'build']);
run('electron-builder', ['--linux']);
normalizeLinuxReleaseNames();
