/* =====================================================================
   db.js — SQLite-Datenbank (better-sqlite3), Ersatz für Cloudflare D1.

   D1 ist selbst schon SQLite unter der Haube — deshalb funktioniert das bestehende Schema
   (../d1/schema.sql) unverändert. WICHTIG: ../d1/schema.sql ist bereits der KONSOLIDIERTE
   Endzustand (enthält gutschein_code, paypal_order_id, customers-Tabelle direkt) — die
   migration-*.sql-Dateien daneben waren einmalige ALTER-TABLE-Schritte für die SCHON LAUFENDE
   alte D1-Datenbank und dürfen auf einer frischen Datenbank NICHT nochmal ausgeführt werden
   (migration-0002 würde z.B. mit "duplicate column name" fehlschlagen, weil schema.sql die
   Spalte schon enthält). Deshalb hier bewusst NUR schema.sql. Echte, bestehende Bestelldaten aus
   der alten D1-Datenbank werden separat importiert (siehe import-d1-daten.js), nicht über die
   Migrationsdateien.

   Der Datenbank-Ordner liegt außerhalb des Programmcodes (siehe DB_PATH), damit ein Update des
   Servers (z.B. "git pull") niemals die echten Bestelldaten anfassen kann.
   ===================================================================== */

import Database from "better-sqlite3";
import { readFileSync, existsSync, mkdirSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";

const __dirname = dirname(fileURLToPath(import.meta.url));

// Überschreibbar über die Umgebungsvariable DB_PATH (siehe .env) — Standard: eigener,
// vom Programmcode getrennter Datenordner.
const DB_PATH = process.env.DB_PATH || "/var/lib/vandiy-shop/vandiy-shop.db";
const D1_ORDNER = join(__dirname, "..", "d1");

mkdirSync(dirname(DB_PATH), { recursive: true });

export const db = new Database(DB_PATH);
db.pragma("journal_mode = WAL"); // bessere Nebenläufigkeit bei gleichzeitigen Lese-/Schreibzugriffen
db.pragma("foreign_keys = ON");

function fuehreSqlDateiAus(pfad) {
  if (!existsSync(pfad)) return;
  const sql = readFileSync(pfad, "utf-8");
  db.exec(sql);
}

export function initDb() {
  fuehreSqlDateiAus(join(D1_ORDNER, "schema.sql"));
}
