from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class AvatarFrame:
    state: str
    label: str
    art: str


_FRAMES: dict[str, AvatarFrame] = {
    "idle": AvatarFrame(
        state="idle",
        label="En attente",
        art='''
        .-"""-.
       /  . .  \\
       |   ^   |
       | \\___/ |
        \\_____/
       /|  |  |\\
      /_|__|__|_\\
         /_\\
        '''.strip("\n"),
    ),
    "thinking": AvatarFrame(
        state="thinking",
        label="Réflexion",
        art='''
        .-"""-.
       /  o o  \\    ?
       |   ~   |  ?
       |  ___  |
        \\_____/
       /|  |  |\\
      /_|__|__|_\\
         /_\\
        '''.strip("\n"),
    ),
    "tool": AvatarFrame(
        state="tool",
        label="Outil en cours",
        art='''
        .-"""-.
       /  > <  \\   [#]
       |   -   |  /|\\
       | \\___/ |   |
        \\_____/
       /|  |  |\\
      /_|__|__|_\\
         /_\\
        '''.strip("\n"),
    ),
    "speaking": AvatarFrame(
        state="speaking",
        label="Réponse",
        art='''
        .-"""-.
       /  ^ ^  \\  )))
       |   O   |
       | \\___/ |
        \\_____/
       /|  |  |\\
      /_|__|__|_\\
         /_\\
        '''.strip("\n"),
    ),
    "error": AvatarFrame(
        state="error",
        label="Erreur",
        art='''
        .-"""-.
       /  x x  \\   !
       |   _   |  !!!
       | /___\\ |
        \\_____/
       /|  |  |\\
      /_|__|__|_\\
         /_\\
        '''.strip("\n"),
    ),
}


def get_avatar(state: str = "idle") -> dict[str, str]:
    frame = _FRAMES.get(state, _FRAMES["idle"])
    return {"state": frame.state, "label": frame.label, "art": frame.art}


def available_states() -> list[str]:
    return list(_FRAMES.keys())
