import os
import sys
from pathlib import Path

import pytest

_SKILL_COMPLY_ROOT = Path(__file__).resolve().parent.parent / "skills" / "skill-comply"
if str(_SKILL_COMPLY_ROOT) not in sys.path:
    sys.path.insert(0, str(_SKILL_COMPLY_ROOT))

from scripts.runner import _setup_sandbox  # noqa: E402
from scripts.scenario_generator import Scenario  # noqa: E402

_GLOBAL_MARKER = "/tmp/runner_test_pwned_marker"


@pytest.fixture(autouse=True)
def _remove_marker():
    if os.path.exists(_GLOBAL_MARKER):
        os.remove(_GLOBAL_MARKER)
    yield
    if os.path.exists(_GLOBAL_MARKER):
        os.remove(_GLOBAL_MARKER)


@pytest.mark.parametrize(
    "setup_commands,test_id",
    [
        (
            ("python -c \"import os; os.system('touch /tmp/runner_test_pwned_marker')\"",),
            "python_interpreter",
        ),
        (
            ("../../../../../../bin/sh -c 'touch /tmp/runner_test_pwned_marker'",),
            "path_traversal",
        ),
        (
            ("bash -c 'touch /tmp/runner_test_pwned_marker'",),
            "non_allowlisted_binary",
        ),
        (
            ("echo hello",),
            "benign_echo",
        ),
    ],
    ids=["python_interpreter", "path_traversal", "non_allowlisted_binary", "benign_echo"],
)
def test_setup_sandbox_blocks_dangerous_commands(setup_commands, test_id, tmp_path):
    """Invariant: _setup_sandbox must not execute disallowed commands."""
    scenario = Scenario(
        id=f"test-{test_id}",
        level=1,
        level_name="basic",
        description="security test scenario",
        prompt="",
        setup_commands=setup_commands,
    )
    sandbox_dir = tmp_path / "sandbox"

    _setup_sandbox(sandbox_dir, scenario)

    assert not os.path.exists(_GLOBAL_MARKER), (
        f"Arbitrary command execution detected for '{test_id}': "
        f"marker file created at {_GLOBAL_MARKER}"
    )
