import { mkdirSync } from "node:fs";
import path from "node:path";
import Database from "better-sqlite3";

/**
 * The one place a SQLite handle is opened: creates the data directory (a fresh
 * clone has none — better-sqlite3 won't create it) and sets WAL.
 */
export function openDatabase(dbPath: string): Database.Database {
  if (dbPath !== ":memory:") mkdirSync(path.dirname(dbPath), { recursive: true });
  const db = new Database(dbPath);
  db.pragma("journal_mode = WAL");
  db.pragma("secure_delete = ON");
  return db;
}

/** One-way privacy migration after product measurement was removed. */
export function dropLegacyMeasurementTables(db: Database.Database): void {
  const legacyTable = db.prepare(
    "SELECT 1 FROM sqlite_master WHERE type = 'table' AND name IN ('searches', 'search_results', 'clickouts') LIMIT 1",
  ).get();
  if (!legacyTable) return;
  db.exec(`
    DROP TABLE IF EXISTS clickouts;
    DROP TABLE IF EXISTS search_results;
    DROP TABLE IF EXISTS searches;
  `);
  db.pragma("wal_checkpoint(TRUNCATE)");
}
