import sys
from pathlib import Path

sys.path.append(str(Path(__file__).resolve().parents[1] / "src"))

from cli import SophiaCLI  # noqa: E402


class DummyClient:
    def chat_completion(self, messages, stream=False):
        return "1. step one\n2. step two"


def test_goal_commands(tmp_path, capsys):
    cli = SophiaCLI(init_client=False, session_dir=tmp_path)
    cli.handle_command("/goal add write tests")
    assert cli.session.goals == ["write tests"]
    cli.handle_command("/goal list")
    out = capsys.readouterr().out
    assert "write tests" in out
    cli.handle_command("/goal clear")
    assert cli.session.goals == []


def test_plan_generation_and_run(tmp_path, monkeypatch):
    cli = SophiaCLI(init_client=False, session_dir=tmp_path)
    cli.session.client = DummyClient()
    outputs = []

    def fake_stream_response(text):
        outputs.append(text)

    cli.stream_response = fake_stream_response  # type: ignore
    cli.handle_command("/plan build feature")
    assert cli.session.current_plan == ["step one", "step two"]
    inputs = iter(["y", "n"])
    monkeypatch.setattr("builtins.input", lambda _: next(inputs))
    cli.handle_command("/plan run")
    assert outputs == ["step one"]
