"""Default extractor providing fallback values.

This module provides a minimal implementation of the DataExtractor protocol
that returns default/empty values for all extraction methods. Used as a
fallback when no specific extractor is available.
"""

from typing import Optional


class DefaultExtractor:
    """Extractor that provides default fallback values for all extraction methods.

    This class implements the DataExtractor protocol by returning sensible
    defaults (None, empty strings, empty lists) for all extraction operations.
    It's used as a final fallback in the extractor chain when no other
    extractor can provide data.

    All methods return None or empty values, making it safe to use when
    no actual data extraction is possible.
    """

    def extract_title(self) -> Optional[str]:
        """Return default title.

        Returns:
            Default title string "Unknown Title"
        """
        return "Unknown Title"

    def extract_year(self) -> Optional[str]:
        """Return year. Returns None as no year information is available."""
        return None

    def extract_source(self) -> Optional[str]:
        """Return video source. Returns None as no source information is available."""
        return None

    def extract_order(self) -> Optional[str]:
        """Return sequence order. Returns None as no order information is available."""
        return None

    def extract_resolution(self) -> Optional[str]:
        """Return resolution. Returns None as no resolution information is available."""
        return None

    def extract_hdr(self) -> Optional[str]:
        """Return HDR information. Returns None as no HDR information is available."""
        return None

    def extract_movie_db(self) -> list[str] | None:
        """Return movie database ID. Returns None as no database information is available."""
        return None

    def extract_special_info(self) -> Optional[str]:
        """Return special edition info. Returns None as no special info is available."""
        return None

    def extract_audio_langs(self) -> Optional[str]:
        """Return audio languages. Returns None as no language information is available."""
        return None

    def extract_meta_type(self) -> Optional[str]:
        """Return metadata type. Returns None as no type information is available."""
        return None

    def extract_size(self) -> Optional[int]:
        """Return file size. Returns None as no size information is available."""
        return None

    def extract_modification_time(self) -> Optional[float]:
        """Return modification time. Returns None as no timestamp is available."""
        return None

    def extract_file_name(self) -> Optional[str]:
        """Return file name. Returns None as no filename is available."""
        return None

    def extract_file_path(self) -> Optional[str]:
        """Return file path. Returns None as no file path is available."""
        return None

    def extract_frame_class(self) -> Optional[str]:
        """Return frame class. Returns None as no frame class information is available."""
        return None

    def extract_video_tracks(self) -> list[dict]:
        """Return video tracks. Returns empty list as no video tracks are available."""
        return []

    def extract_audio_tracks(self) -> list[dict]:
        """Return audio tracks. Returns empty list as no audio tracks are available."""
        return []

    def extract_subtitle_tracks(self) -> list[dict]:
        """Return subtitle tracks. Returns empty list as no subtitle tracks are available."""
        return []

    def extract_anamorphic(self) -> Optional[str]:
        """Return anamorphic info. Returns None as no anamorphic information is available."""
        return None

    def extract_extension(self) -> Optional[str]:
        """Return file extension. Returns None as no extension is available."""
        return "ext"

    def extract_tmdb_url(self) -> Optional[str]:
        """Return TMDB URL. Returns None as no TMDB URL is available."""
        return None

    def extract_tmdb_id(self) -> Optional[str]:
        """Return TMDB ID. Returns None as no TMDB ID is available."""
        return None

    def extract_original_title(self) -> Optional[str]:
        """Return original title. Returns None as no original title is available."""
        return None