"""Tests for the hub zone."""

import pathlib

from mudlib.portal import Portal
from mudlib.zones import load_zone


def test_load_hub_zone():
    """Load the hub zone from TOML file."""
    project_root = pathlib.Path(__file__).resolve().parents[1]
    hub_path = project_root / "content" / "zones" / "hub.toml"

    zone = load_zone(hub_path)

    assert zone.name == "hub"
    assert zone.width == 15
    assert zone.height == 15
    assert zone.toroidal is False
    assert zone.spawn_x == 7
    assert zone.spawn_y == 7


def test_hub_zone_has_portals():
    """Hub zone has portals to overworld, tavern, and treehouse."""
    project_root = pathlib.Path(__file__).resolve().parents[1]
    hub_path = project_root / "content" / "zones" / "hub.toml"

    zone = load_zone(hub_path)

    # Find portals in zone contents
    portals = [obj for obj in zone._contents if isinstance(obj, Portal)]
    assert len(portals) == 3

    # Check that we have portals to each target zone
    target_zones = {p.target_zone for p in portals}
    assert target_zones == {"overworld", "tavern", "treehouse"}


def test_hub_zone_portals_at_correct_positions():
    """Portals are at expected coordinates on the map."""
    project_root = pathlib.Path(__file__).resolve().parents[1]
    hub_path = project_root / "content" / "zones" / "hub.toml"

    zone = load_zone(hub_path)

    portals = [obj for obj in zone._contents if isinstance(obj, Portal)]

    # North portal to overworld at (7, 0)
    overworld_portal = [p for p in portals if p.target_zone == "overworld"][0]
    assert overworld_portal.x == 7
    assert overworld_portal.y == 0
    assert overworld_portal.target_x == 500
    assert overworld_portal.target_y == 500

    # East portal to tavern at (14, 7)
    tavern_portal = [p for p in portals if p.target_zone == "tavern"][0]
    assert tavern_portal.x == 14
    assert tavern_portal.y == 7
    assert tavern_portal.target_x == 4
    assert tavern_portal.target_y == 5

    # South portal to treehouse at (7, 14)
    treehouse_portal = [p for p in portals if p.target_zone == "treehouse"][0]
    assert treehouse_portal.x == 7
    assert treehouse_portal.y == 14
    assert treehouse_portal.target_x == 0
    assert treehouse_portal.target_y == 7
