"""REQ-103: sample contracts use naming patterns with interpolation."""
import sys
from pathlib import Path

import pytest

ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT))

from core.contract_resolver import resolve


def test_static_assets_bucket_name_uses_naming_pattern():
    stack = resolve(str(ROOT / "contracts" / "static-assets.yml"))
    s3 = [r for r in stack["resources"] if r["type"] == "aws:s3:bucket"][0]
    bucket = s3["inputs"]["bucket_name"]
    # The naming pattern: acdl-<env>-<id>-<account_id>-<region>
    assert bucket.startswith("acdl-dev-assets-")
    assert "000000000000" in bucket
    assert bucket.endswith("us-east-1")
    assert bucket == "acdl-dev-assets-000000000000-us-east-1"


def test_static_assets_region_uses_env_region():
    stack = resolve(str(ROOT / "contracts" / "static-assets.yml"))
    s3 = [r for r in stack["resources"] if r["type"] == "aws:s3:bucket"][0]
    assert s3["inputs"]["region"] == "us-east-1"


def test_static_assets_contract_has_interpolation_tokens_pre_resolve():
    """The contract file itself contains the raw ${env.*} tokens (pre-resolution)."""
    text = (ROOT / "contracts" / "static-assets.yml").read_text()
    assert "${env.environment}" in text
    assert "${contract.id}" in text
    assert "${env.account_id}" in text
    assert "${env.region}" in text


def test_microservice_contract_has_interpolation_tokens():
    text = (ROOT / "contracts" / "microservice.yml").read_text()
    assert "${env.environment}" in text
    assert "${env.account_id}" in text
    assert "${env.region}" in text


def test_microservice_resolves_with_interpolation():
    stack = resolve(str(ROOT / "contracts" / "microservice.yml"))
    assert stack["stack"]["name"] == "msvc"
    # Resolution succeeded — no unresolved tokens.


def test_interpolation_uses_all_naming_components():
    """The naming pattern includes region, account id, and environment (the binding requirement)."""
    stack = resolve(str(ROOT / "contracts" / "static-assets.yml"))
    s3 = [r for r in stack["resources"] if r["type"] == "aws:s3:bucket"][0]
    bucket = s3["inputs"]["bucket_name"]
    # Verify all three required components are present in the resolved name.
    assert "dev" in bucket  # environment
    assert "000000000000" in bucket  # account_id
    assert "us-east-1" in bucket  # region
    assert "assets" in bucket  # contract id