from enum import Enum, auto
from dataclasses import dataclass


class TokenType(Enum):
    # ── Estrutura ───────────────────────────
    DEF = auto()
    SE = auto()
    ENTAO = auto()
    SENAO = auto()

    INDENT = auto()
    DEDENT = auto()
    NEWLINE = auto()
    EOF = auto()

    # ── Delimitadores ───────────────────────
    LPAREN = auto()
    RPAREN = auto()
    COMMA = auto()

    # ── Identificadores e literais ─────────
    IDENT = auto()
    INT = auto()

    # ── Operadores aritméticos ─────────────
    PLUS = auto()
    MINUS = auto()
    STAR = auto()
    SLASH = auto()

    # ── Operadores relacionais ─────────────
    LT = auto()
    GT = auto()
    LE = auto()
    GE = auto()
    EQ = auto()
    NE = auto()


@dataclass
class Token:
    type: TokenType
    value: str | int | None
    line: int
    col: int

    def __repr__(self):
        return f"Token({self.type.name}, {self.value!r}, {self.line}:{self.col})"


# -------------------------------------------------------
# Palavras reservadas
# -------------------------------------------------------

KEYWORDS = {
    "def":    TokenType.DEF,
    "se":     TokenType.SE,
    "entao":  TokenType.ENTAO,
    "senao":  TokenType.SENAO,
}
