/**
 * Read-only: compare Mongo vs MySQL row counts for financial tables.
 */
import fs from "fs";
import path from "path";
import mongoose from "mongoose";
import mysql from "mysql2/promise";

function loadEnv() {
  const t = fs.readFileSync(path.join(process.cwd(), ".env"), "utf8");
  for (const line of t.split(/\r?\n/)) {
    const s = line.trim();
    if (!s || s.startsWith("#")) continue;
    const eq = s.indexOf("=");
    if (eq <= 0) continue;
    const k = s.slice(0, eq).trim();
    let v = s.slice(eq + 1).trim();
    if (
      (v.startsWith('"') && v.endsWith('"')) ||
      (v.startsWith("'") && v.endsWith("'"))
    ) {
      v = v.slice(1, -1);
    }
    process.env[k] = v;
  }
}

async function main() {
  loadEnv();
  await mongoose.connect(process.env.MONGODB_URI!);
  const mongo: Record<string, number> = {};
  for (const c of [
    "bookings",
    "refunds",
    "withdrawalrequests",
    "ledgerentries",
    "wallets",
    "wallettxns",
    "wallettopups",
  ]) {
    mongo[c] = await mongoose.connection.db!.collection(c).countDocuments();
  }

  const pool = await mysql.createPool({
    host: process.env.MYSQL_HOST || "127.0.0.1",
    port: Number(process.env.MYSQL_PORT || 3306),
    user: process.env.MYSQL_USER || "root",
    password: process.env.MYSQL_PASSWORD ?? "",
    database: process.env.MYSQL_DATABASE || "safar_libya",
  });
  const mysqlCounts: Record<string, number> = {};
  for (const table of [
    "bookings",
    "refunds",
    "withdrawal_requests",
    "ledger_entries",
    "wallets",
    "wallet_txns",
    "wallet_topups",
  ]) {
    const [rows] = await pool.query(`SELECT COUNT(*) AS n FROM ${table}`);
    mysqlCounts[table] = Number((rows as any)[0].n);
  }

  console.log(JSON.stringify({ mongo, mysql: mysqlCounts }, null, 2));
  await pool.end();
  await mongoose.disconnect();
}

main().catch((e) => {
  console.error(e instanceof Error ? e.message : e);
  process.exit(1);
});
