"""
Tarot card attributes and Kabbalistic data structures.

This module re-exports shared attributes from utils and defines Tarot-specific
attribute classes for cards.
"""

from dataclasses import dataclass
from typing import Optional

# Re-export attributes from other modules for convenience/backward compatibility
from kaballah.attributes import (
    Correspondences,
    Path,
    PeriodicTable,
    Sephera,
    TreeOfLife,
)
from letter.attributes import (
    DoublLetterTrump,
    EnglishAlphabet,
    EnochianArchetype,
    EnochianGridPosition,
    EnochianLetter,
    EnochianSpirit,
    EnochianTablet,
    GreekAlphabet,
    HebrewAlphabet,
    Letter,
)
from letter.iChing_attributes import (
    Hexagram,
    Trigram,
)
from temporal.attributes import (
    AstrologicalInfluence,
    ClockHour,
    Degree,
    Hour,
    Month,
    Weekday,
    Zodiac,
)

# Re-export shared attributes from utils
from utils.attributes import (
    Cipher,
    CipherResult,
    Color,
    Colorscale,
    Element,
    ElementType,
    God,
    Meaning,
    Note,
    Number,
    Perfume,
    Planet,
)

# Alias Day to Weekday for backward compatibility (Day in this context was Day of Week)
Day = Weekday

__all__ = [
    # Re-exported from utils
    "Element",
    "ElementType",
    "Number",
    "Color",
    "Colorscale",
    "Planet",
    "God",
    "Cipher",
    "CipherResult",
    "Perfume",
    "Note",
    # Re-exported from kaballah
    "Sephera",
    "PeriodicTable",
    "TreeOfLife",
    "Correspondences",
    "Path",
    # Re-exported from letter
    "Letter",
    "EnglishAlphabet",
    "GreekAlphabet",
    "HebrewAlphabet",
    "DoublLetterTrump",
    "EnochianLetter",
    "EnochianSpirit",
    "EnochianTablet",
    "EnochianGridPosition",
    "EnochianArchetype",
    # Re-exported from letter.iChing
    "Trigram",
    "Hexagram",
    # Re-exported from temporal
    "Month",
    "Day",
    "Weekday",
    "Hour",
    "ClockHour",
    "Zodiac",
    "Degree",
    "AstrologicalInfluence",
    # Tarot-core classes defined below
    "Suit",
    "Meaning",
    "CardImage",
]


@dataclass
class Suit:
    """Represents a tarot suit."""

    name: str
    element: "ElementType"
    tarot_correspondence: str
    number: int


@dataclass
class CardImage:
    """Represents an image associated with a card."""

    filename: str
    artist: str
    deck_name: str
    url: Optional[str] = None
