from datetime import UTC, datetime

from cyberbrain26.schemas import Conversation, Role


def _now_iso() -> str:
    return datetime.now(UTC).isoformat()


def test_new_conversation_defaults():
    c = Conversation.new()
    assert c.title == "Nova konverzace"
    assert c.history == []
    assert c.id


def test_title_dict_bug_is_coerced():
    data = {
        "id": "x",
        "title": {"title": "Moje konverzace", "history": []},
        "created_at": _now_iso(),
        "updated_at": _now_iso(),
        "history": [],
    }
    c = Conversation.from_disk(data)
    assert c.title == "Moje konverzace"


def test_title_none_and_empty_becomes_default():
    for bad in (None, "", "   "):
        data = {
            "id": "x", "title": bad,
            "created_at": _now_iso(),
            "updated_at": _now_iso(),
            "history": [],
        }
        assert Conversation.from_disk(data).title == "Nova konverzace"


def test_append_and_trim():
    c = Conversation.new()
    for i in range(40):
        c.append(Role.user, f"msg{i}")
    assert len(c.history) == 30
    assert c.history[-1].content == "msg39"


def test_to_disk_roundtrip():
    c = Conversation.new("Test")
    c.append(Role.user, "ahoj")
    c.append(Role.assistant, "nazdar")
    raw = c.to_disk()
    assert isinstance(raw["title"], str)
    c2 = Conversation.from_disk(raw)
    assert c2.history[0].content == "ahoj"
    assert c2.history[1].role == Role.assistant
