import { createRequire } from "node:module";

import type BetterSqlite3 from "better-sqlite3";

const require = createRequire(import.meta.url);
const Database = require("better-sqlite3") as typeof BetterSqlite3;

export class WorkerStorageStatus {
  private readonly database: BetterSqlite3.Database;

  constructor(databasePath: string) {
    const nativeBinding = process.env.DADA_SQLITE_NATIVE_BINDING;
    this.database = new Database(databasePath, nativeBinding ? { nativeBinding } : undefined);
    this.database.pragma("busy_timeout = 5000");
  }

  getStatus(): "active" | "full" | "unavailable" {
    const row = this.database.prepare("SELECT storage_status FROM local_backend_storage_state WHERE singleton = 1").get() as { storage_status: "active" | "full" | "unavailable" };
    return row.storage_status;
  }

  markLogUnavailable() {
    this.database.prepare(`
      UPDATE local_backend_storage_state
      SET storage_status = 'unavailable', measured_at = ?, version = version + 1
      WHERE singleton = 1
    `).run(new Date().toISOString());
  }

  close() {
    this.database.close();
  }
}
