import tempfile
import unittest
from pathlib import Path

from evennia_tools.telemetry import event_log_path, session_meta_path, write_session_metadata
from evennia_tools.training import WORLD_BASICS_STEPS, example_eval_path, example_trace_path


class TestEvenniaTraining(unittest.TestCase):
    def test_world_basics_sequence_is_stable(self):
        self.assertEqual(
            tuple(step["command"] for step in WORLD_BASICS_STEPS),
            ("look", "enter", "workshop", "look", "courtyard", "chapel", "look Book of the Soul"),
        )

    def test_each_step_has_nonempty_expectations(self):
        for step in WORLD_BASICS_STEPS:
            self.assertTrue(step["expected"])

    def test_example_paths_land_in_examples_dir(self):
        root = Path("/tmp/repo")
        self.assertEqual(example_trace_path(root).name, "world-basics-trace.example.jsonl")
        self.assertEqual(example_eval_path(root).name, "world-basics-eval.example.json")

    def test_session_meta_path_suffix(self):
        path = session_meta_path("sess1", "/tmp/evennia-test")
        self.assertEqual(path.name, "sess1.meta.json")

    def test_write_session_metadata(self):
        with tempfile.TemporaryDirectory() as td:
            path = write_session_metadata("sess2", {"kind": "world"}, td)
            self.assertTrue(path.exists())
            self.assertIn("sess2", path.read_text())
            self.assertIn(str(event_log_path("sess2", td)), path.read_text())


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