import { describe, it, expect, beforeEach, mock } from "bun:test";
import { createMockRuntime } from "./test-utils";
import { squidRouterEnvSchema } from "../helpers/utils";

describe("Edge case coverage", () => {
  describe("squidRouterEnvSchema edge cases", () => {
    it("should handle missing EVM address when private key is provided", () => {
      const config = {
        SQUID_INTEGRATOR_ID: "test-id",
        SQUID_SDK_URL: "https://api.squid.com",
        SQUID_EVM_ADDRESS: "",
        SQUID_EVM_PRIVATE_KEY:
          "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
      };

      expect(() => squidRouterEnvSchema.parse(config)).toThrow();
    });

    it("should handle missing EVM private key when address is provided", () => {
      const config = {
        SQUID_INTEGRATOR_ID: "test-id",
        SQUID_SDK_URL: "https://api.squid.com",
        SQUID_EVM_ADDRESS: "0x742D35Cc6634c0532925A3b844BC9E7595f6F269",
        SQUID_EVM_PRIVATE_KEY: "",
      };

      expect(() => squidRouterEnvSchema.parse(config)).toThrow();
    });

    it("should handle both EVM credentials missing", () => {
      const config = {
        SQUID_INTEGRATOR_ID: "test-id",
        SQUID_SDK_URL: "https://api.squid.com",
        SQUID_EVM_ADDRESS: "",
        SQUID_EVM_PRIVATE_KEY: "",
      };

      expect(() => squidRouterEnvSchema.parse(config)).toThrow(
        "At least one valid address and private key pair is required"
      );
    });

    it("should fail validation when only EVM address is provided", () => {
      const config = {
        SQUID_INTEGRATOR_ID: "test-id",
        SQUID_SDK_URL: "https://api.squid.com",
        SQUID_EVM_ADDRESS: "0x742D35Cc6634c0532925A3b844BC9E7595f6F269",
        SQUID_EVM_PRIVATE_KEY: null,
      };

      expect(() => squidRouterEnvSchema.parse(config)).toThrow();
    });

    it("should fail validation when only EVM private key is provided", () => {
      const config = {
        SQUID_INTEGRATOR_ID: "test-id",
        SQUID_SDK_URL: "https://api.squid.com",
        SQUID_EVM_ADDRESS: null,
        SQUID_EVM_PRIVATE_KEY:
          "0x0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
      };

      expect(() => squidRouterEnvSchema.parse(config)).toThrow();
    });
  });

  describe("Test utils coverage", () => {
    it("should properly mock logger", async () => {
      const { mockLogger } = await import("./test-utils");
      mockLogger();

      // Verify logger methods are mocked
      const { elizaLogger } = await import("@elizaos/core");
      expect(elizaLogger.error).toBeDefined();
      expect(elizaLogger.warn).toBeDefined();
      expect(elizaLogger.info).toBeDefined();
      expect(elizaLogger.debug).toBeDefined();
      expect(elizaLogger.log).toBeDefined();
    });
  });
});
