from __future__ import annotations

from dataclasses import dataclass, field


@dataclass
class EA:
    text: str
    mode: str
    size: str
    length: int
    reg: int | None = None
    value: int | None = None
    address: int | None = None


@dataclass
class Instruction:
    address: int
    raw: bytes
    mnemonic: str
    operands: str = ""
    kind: str = "normal"
    targets: list[int] = field(default_factory=list)
    fallthrough: bool = True
    comment: str = ""
    valid: bool = True
    references: list[int] = field(default_factory=list)
    writes_br: bool = False
    br_value: int | None = None
    cycles: dict[str, object] | None = None

    @property
    def size(self) -> int:
        return len(self.raw)

    @property
    def text(self) -> str:
        if self.operands:
            return f"{self.mnemonic} {self.operands}"
        return self.mnemonic
