from __future__ import annotations

from dataclasses import dataclass, field
from typing import Any


@dataclass
class NormalizedEpisode:
    source_episode_id: str
    title: str
    filename: str
    season: int
    episode: int
    m3u8_url: str
    raw: dict[str, Any] = field(default_factory=dict)


@dataclass
class NormalizedServer:
    name: str
    priority: int = 0
    episodes: list[NormalizedEpisode] = field(default_factory=list)
    raw: dict[str, Any] = field(default_factory=dict)


@dataclass
class NormalizedMovie:
    source: str
    source_slug: str
    title: str
    original_title: str
    year: str
    media_type: str
    tmdb_id: str
    imdb_id: str = ""
    poster_url: str = ""
    backdrop_url: str = ""
    runtime: str = ""
    content: str = ""
    genres: list[str] = field(default_factory=list)
    countries: list[str] = field(default_factory=list)
    actors: list[str] = field(default_factory=list)
    directors: list[str] = field(default_factory=list)
    raw: dict[str, Any] = field(default_factory=dict)
    servers: list[NormalizedServer] = field(default_factory=list)

    @property
    def merge_key(self) -> str:
        key_id = self.tmdb_id or f"{self.source}:{self.source_slug}"
        return f"{self.media_type}:{key_id}"

