import { createDBPool } from "./src/internal/datastore/index";
import dotenv from "dotenv";

dotenv.config();

const dbConfig = {
    host: process.env.DATABASE_HOST,
    port: Number(process.env.DATABASE_PORT),
    database: process.env.DATABASE_NAME,
    user: process.env.DATABASE_USER,
    password: process.env.DATABASE_PWD,
    max: Number(process.env.DATABASE_MAX_CONNECTIONS),
    idleTimeoutMillis: Number(process.env.DATABASE_IDLE_TIMEOUT),
    connectionTimeoutMillis: Number(process.env.DATABASE_CONNECTION_TIMEOUT),
    query_timeout: Number(process.env.DATABASE_QUERY_TIMEOUT),
    statement_timeout: Number(process.env.DATABASE_STATEMENT_TIMEOUT),
};

const db = createDBPool(dbConfig);

async function checkTable(tableName: string) {
    try {
        await db.selectFrom(tableName as any).selectAll().limit(1).execute();
        console.log(`[FAIL] Table '${tableName}' still exists.`);
    } catch (err: any) {
        if (err.code === '42P01') { // undefined_table
            console.log(`[PASS] Table '${tableName}' does not exist.`);
        } else {
            console.error(`[ERROR] Error checking '${tableName}':`, err.message);
        }
    }
}

async function verify() {
    await checkTable('members');
    await checkTable('bookings');
    await checkTable('rci_resorts');

    // Check kept table
    try {
        await db.selectFrom('campaigns').selectAll().limit(1).execute();
        console.log(`[PASS] Table 'campaigns' still exists (Correct).`);
    } catch (err) {
        console.error(`[FAIL] Table 'campaigns' missing or error:`, err);
    }

    // Check kept table
    try {
        await db.selectFrom('admin_console_users').selectAll().limit(1).execute();
        console.log(`[PASS] Table 'admin_console_users' still exists (Correct).`);
    } catch (err) {
        console.error(`[FAIL] Table 'admin_console_users' missing or error:`, err);
    }

    await db.destroy();
}

verify();
