#!/usr/bin/env ts-node

/**
 * Robust plattformunabhängiger Dateikopierer
 * Verwendung: node fscopy.ts -s <quelle> -t <ziel>
 * Optionen: -h | --help
 */

import * as fs from "fs";
import * as path from "path";

function showHelp(): void {
  console.log(`
Copy Files with node.js
Verwendung:
  node fscopy.ts -s <quelle> -q <ziel>

Parameter:
  -s, --source      Pfad zur Quelldatei (z.B. static/.htaccess)
  -t, --target        Pfad zur Zieldatei   (z.B. dist/app/.htaccess)
  -h, --help        Diese Hilfe anzeigen
`);
  process.exit(0);
}

function parseArgs(): { source: string; ziel: string } {
  const args = process.argv.slice(2);
  let source = "";
  let ziel = "";

  for (let i = 0; i < args.length; i++) {
    switch (args[i]) {
      case "-s":
      case "--source":
        source = args[++i];
        break;
      case "-t":
      case "--target":
        ziel = args[++i];
        break;
      case "-h":
      case "--help":
        showHelp();
        break;
      default:
        console.error(`Unbekannter Parameter: ${args[i]}`);
        showHelp();
    }
  }

  if (!source || !ziel) {
    console.error("❌ Quelle und Ziel müssen angegeben werden.");
    showHelp();
  }

  return { source, ziel };
}

function copyFile(source: string, ziel: string): void {
  const zielVerzeichnis = path.dirname(ziel);
  fs.mkdir(zielVerzeichnis, { recursive: true }, (mkdirErr) => {
    if (mkdirErr) {
      console.error(`❌ Zielverzeichnis konnte nicht erstellt werden: ${mkdirErr.message}`);
      process.exit(1);
    }

    fs.copyFile(source, ziel, (copyErr) => {
      if (copyErr) {
        console.error(`❌ Fehler beim Kopieren: ${copyErr.message}`);
        process.exit(1);
      }

      console.log(`✔ Datei erfolgreich kopiert: ${source} → ${ziel}`);
    });
  });
}

// Ausführung
const { source, ziel } = parseArgs();
copyFile(source, ziel);
