import { getAccount } from "@solana/spl-token";
import { getTestContext } from "./setup";

describe("System Status", () => {
  it("Display Final System Status", async () => {
    const ctx = getTestContext();
    const {
      program,
      connection,
      registryPda,
      marketPda,
      company1Pda,
      company2Pda,
      company1EuaVault,
      company1UsdcVault,
      company2EuaVault,
      company2UsdcVault,
    } = ctx;

    console.log("\n=== FINAL SYSTEM STATUS ===");

    const registry = await program.account.registry.fetch(registryPda);
    const market = await program.account.marketConfig.fetch(marketPda);
    const bmw = await program.account.company.fetch(company1Pda);
    const total = await program.account.company.fetch(company2Pda);

    const bmwEua = await getAccount(connection, company1EuaVault);
    const bmwUsdc = await getAccount(connection, company1UsdcVault);
    const totalEua = await getAccount(connection, company2EuaVault);
    const totalUsdc = await getAccount(connection, company2UsdcVault);

    console.log("\nRegistry:");
    console.log(`  Companies: ${registry.companyCount}`);
    console.log(`  Local Admins: ${registry.localAdminCount}`);

    console.log("\nMarket:");
    console.log(`  Total Volume: ${market.totalVolume} EUA`);
    console.log(`  Total Trades: ${market.totalTrades}`);
    console.log(`  Next Order ID: ${market.nextOrderId}`);

    console.log("\nBMW Manufacturing GmbH:");
    console.log(`  EUA Balance: ${bmwEua.amount} (${bmw.lockedEuaAmount} locked)`);
    console.log(`  USDC Balance: ${Number(bmwUsdc.amount) / 1_000_000} USDC (${Number(bmw.lockedUsdcAmount) / 1_000_000} locked)`);

    console.log("\nTotal Energies SA:");
    console.log(`  EUA Balance: ${totalEua.amount} (${total.lockedEuaAmount} locked)`);
    console.log(`  USDC Balance: ${Number(totalUsdc.amount) / 1_000_000} USDC (${Number(total.lockedUsdcAmount) / 1_000_000} locked)`);
  });
});
