import * as anchor from "@coral-xyz/anchor";
import { Program } from "@coral-xyz/anchor";
import { EuEtsWeb3 } from "../../../blockchain/eu_ets_web3/target/types/eu_ets_web3";
import { PublicKey, Keypair, Connection } from "@solana/web3.js";
import { DbTestHelper, DbConfig } from "./db_helper";

export interface TestContext {
  connection: Connection;
  program: Program<EuEtsWeb3>;
  axumBaseUrl: string;
  programAuthority: Keypair;
  globalAdmin: Keypair;
  localAdminGermany: Keypair;
  localAdminFrance: Keypair;
  company1Admin: Keypair;
  company2Admin: Keypair;
  registryPda: PublicKey;
  localAdminGermanyPda: PublicKey;
  localAdminFrancePda: PublicKey;
  company1Pda: PublicKey;
  company2Pda: PublicKey;
  marketPda: PublicKey;
  euaMint: PublicKey;
  ghgMint: PublicKey;
  usdcMint: PublicKey;
  company1EuaVault: PublicKey;
  company1GhgVault: PublicKey;
  company1UsdcVault: PublicKey;
  company2EuaVault: PublicKey;
  company2GhgVault: PublicKey;
  company2UsdcVault: PublicKey;
  company1AdminUsdcAta: PublicKey;
  company2AdminUsdcAta: PublicKey;
  db: DbTestHelper;
}

export const testContext: Partial<TestContext> = {};

export function getTestContext(): TestContext {
  return testContext as TestContext;
}

export function setTestContext(updates: Partial<TestContext>) {
  Object.assign(testContext, updates);
}

export function getDbConfig(): DbConfig {
  return {
    host: process.env.DB_HOST || "localhost",
    port: parseInt(process.env.DB_PORT || "5432"),
    database: process.env.DB_NAME || "eu_ets_db",
    user: process.env.DB_USER || "admin",
    password: process.env.DB_PASSWORD || "admin123",
  };
}
