import "reflect-metadata";
import * as dotenv from "dotenv";
import * as path from "path";
import * as fs from "fs";

// Load environment variables from .env.test if it exists
// This allows local integration tests to run with a local database
// CI environments explicitly provide DATABASE_URL in the test step, so skip loading .env.test there
const envTestPath = path.resolve(__dirname, ".env.test");
const isCI =
  process.env.CI === "true" ||
  process.env.CI === "woodpecker" ||
  process.env.CI_PIPELINE_EVENT !== undefined;

if (!isCI && fs.existsSync(envTestPath)) {
  const result = dotenv.config({ path: envTestPath });
  if (result.error) {
    throw new Error(
      `Failed to load test environment configuration: ${result.error.message}\n` +
        `Ensure .env.test exists in the api directory and is properly formatted.`
    );
  }

  // Validate DATABASE_URL format if provided
  if (process.env.DATABASE_URL && !process.env.DATABASE_URL.startsWith("postgresql://")) {
    throw new Error(
      "Invalid DATABASE_URL format in .env.test. " +
        "Expected format: postgresql://user:password@host:port/database"
    );
  }

  // Log only in debug mode
  if (process.env.DEBUG) {
    console.debug("Test environment variables loaded from .env.test");
  }
}
