"""Ehemals RealCodexAdapter (fest verdrahtete argv, nie ausgeführt, nicht
verdrahtet). Jetzt: CodexAdapter mit Template aus der Konfiguration."""
import tempfile
import unittest
from pathlib import Path

from aria_router.adapter_contract import ResultStatus
from aria_router.codex_adapter import DEFAULT_COMMAND_TEMPLATE, CodexAdapter
from aria_router.runner import MockRunner, RunResult, mock_codex_events

from tests.helpers import GuardedSubprocessRunner, AdapterHarness, fake_codex_template


class RealCodexTests(unittest.TestCase):

    def test_fixed_command(self):
        with tempfile.TemporaryDirectory() as tmp:
            adapter = CodexAdapter(AdapterHarness(Path(tmp)).verifier, runner=MockRunner())

            self.assertEqual(adapter.name, "codex")
            self.assertEqual(adapter.argv, DEFAULT_COMMAND_TEMPLATE)
            self.assertIn("--sandbox", adapter.argv)
            self.assertIn("read-only", adapter.argv)
            self.assertNotIn("danger-full-access", adapter.argv)
            self.assertNotIn("--dangerously-bypass-approvals-and-sandbox", adapter.argv)

    def test_execute_uses_runner(self):
        with tempfile.TemporaryDirectory() as tmp:
            harness = AdapterHarness(Path(tmp))
            runner = MockRunner(lambda spec: RunResult(True, exit_code=0, stdout=mock_codex_events("CODEX_OK")))
            adapter = CodexAdapter(harness.verifier, runner=runner)
            job = harness.job("#public test")

            result = adapter.execute(harness.clear(adapter, job), job)

            self.assertEqual(result.output, "CODEX_OK")
            self.assertEqual(len(runner.calls), 1)
            self.assertEqual(runner.calls[0].stdin, b"#public test")
            self.assertEqual(runner.calls[0].argv, DEFAULT_COMMAND_TEMPLATE)

    def test_missing_workspace(self):
        with tempfile.TemporaryDirectory() as tmp:
            harness = AdapterHarness(Path(tmp))
            adapter = CodexAdapter(harness.verifier, runner=GuardedSubprocessRunner(Path(tmp) / "missing"),
                                   command_template=fake_codex_template())
            job = harness.job("#public test")

            result = adapter.execute(harness.clear(adapter, job), job)

            self.assertEqual(result.status, ResultStatus.FAILED)
            self.assertEqual(result.error_code, "WORKSPACE_UNAVAILABLE")


if __name__ == "__main__":
    unittest.main()
