"""Analysis context for the analysis framework.

This module defines :class:`AnalysisContext`, an immutable container
that bundles everything an analyzer needs to operate.

Analyzers receive all inputs through this context and must never
access the database, filesystem, or configuration directly.
"""

from __future__ import annotations

from dataclasses import dataclass

from config.settings import Settings
from database.models import Track
from decoder.decoded_audio import DecodedAudio


@dataclass(frozen=True)
class AnalysisContext:
    """Immutable context for analyzer execution.

    Attributes:
        track: The database track being analyzed.
        decoded_audio: Decoded audio samples and metadata.
        settings: Runtime configuration settings.
    """

    track: Track
    decoded_audio: DecodedAudio
    settings: Settings
