import os
import tempfile
from pathlib import Path

import pytest

# The tests must never read or write anything of the operator's: not the real idea store, not
# ~/.antilib/.env, not a registered project. Everything is redirected before scout is imported,
# because config.py resolves its paths at import time.
SANDBOX = Path(tempfile.gettempdir()) / "feature-scout-tests"
(SANDBOX / "home").mkdir(parents=True, exist_ok=True)
(SANDBOX / "data").mkdir(parents=True, exist_ok=True)

os.environ["HOME"] = str(SANDBOX / "home")              # never the operator's dotfiles
os.environ["USERPROFILE"] = str(SANDBOX / "home")       # the same, on Windows
os.environ["SCOUT_DATA_DIR"] = str(SANDBOX / "data")    # never the real store
os.environ["SCOUT_PROJECTS_FILE"] = str(SANDBOX / "projects.json")
for leaked in ("SCOUT_CLOUD", "SCOUT_REPO_ROOT"):
    os.environ.pop(leaked, None)

from scout.store import Store  # noqa: E402

GOLDEN = Path(__file__).parent / "golden"


@pytest.fixture
def store():
    return Store(":memory:")


@pytest.fixture
def registered(tmp_path, monkeypatch):
    """A project set up on this computer, the way `feature-scout init` leaves things."""
    import json

    from scout import cli
    from scout.projects import PROJECT_FILE

    folder = tmp_path / "app"
    folder.mkdir()
    (folder / PROJECT_FILE).write_text(json.dumps({
        "version": 1, "key": "terminal", "name": "Test App", "what_it_is": "an app",
        "test_command": "true",
    }))
    registry = tmp_path / "projects.json"
    registry.write_text(json.dumps({"version": 1, "default": "terminal",
                                    "projects": {"terminal": {"folder": str(folder)}}}))
    monkeypatch.setenv("SCOUT_PROJECTS_FILE", str(registry))
    monkeypatch.setattr(cli, "_project_cache", None)
    return folder
