defmodule Towerops.AgentsFixturesTest do
  use Towerops.DataCase

  import Towerops.AccountsFixtures
  import Towerops.AgentsFixtures

  describe "unique_agent_name/0" do
    test "generates unique agent names" do
      name1 = unique_agent_name()
      name2 = unique_agent_name()

      assert name1 != name2
      assert name1 =~ "Test Agent"
      assert name2 =~ "Test Agent"
    end
  end

  describe "agent_token_fixture/2" do
    test "creates an agent token with default name" do
      user = user_fixture()
      {:ok, organization} = Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)

      {:ok, agent_token, token_string} = agent_token_fixture(organization.id)

      assert agent_token.organization_id == organization.id
      assert agent_token.name =~ "Test Agent"
      assert is_binary(token_string)
    end

    test "creates an agent token with custom name" do
      user = user_fixture()
      {:ok, organization} = Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)

      {:ok, agent_token, _token_string} = agent_token_fixture(organization.id, "Custom Agent")

      assert agent_token.name == "Custom Agent"
    end
  end

  describe "agent_assignment_fixture/2" do
    test "creates an agent assignment" do
      user = user_fixture()
      {:ok, organization} = Towerops.Organizations.create_organization(%{name: "Test Org"}, user.id)

      {:ok, site} =
        Towerops.Sites.create_site(%{
          name: "Test Site",
          organization_id: organization.id
        })

      {:ok, device} =
        Towerops.Devices.create_device(%{
          name: "Test Equipment",
          ip_address: "192.168.1.1",
          site_id: site.id,
          organization_id: organization.id
        })

      {:ok, agent_token, _token_string} = agent_token_fixture(organization.id)

      {:ok, assignment} = agent_assignment_fixture(agent_token.id, device.id)

      assert assignment.agent_token_id == agent_token.id
      assert assignment.device_id == device.id
      assert assignment.enabled == true
    end
  end
end
