"""Connector registry helpers.

Lazy factories — importy connectorów wykonują się dopiero w `get_movie_connectors()`
żeby uniknąć circular imports (modeles/db). Każdy entry: `(name, class)` w porządku
ingestu (primary FIRST, mirrory potem — `resolve_movie` wtedy ma do czego dokleić
mirror playback sources).

## Jak dodać nowe movie site

1. Napisz subclass `DooplayConnector` w `app/connectors/dooplay.py` (jeśli site używa
   dooplay/PsyPlay WP theme) — wystarczy `name` + `base_url`. Jeśli inny theme,
   napisz osobny connector implementujący `BaseMovieConnector.fetch_movies()`.
2. Dodaj entry do `_MOVIE_CONNECTORS` poniżej.
3. Backend job `_job_movie_ingest` w `app/scheduler/jobs.py` automatycznie weźmie
   nowy connector przy następnym tick (24h domyślnie).
4. Do ad-hoc backfillu: `python -m app.scheduler.worker --once --strategy=movies
   --performers=<nowa_nazwa>`.

## Czemu paradisehill first

Paradisehill jest jedynym sourcem z chapter markerami i pełnym metadata (director,
rating, country) → idealnie kanoniczny. Dooplay mirrory rzadko mają chaptery i
release_year zwykle pusty. Resolver `resolve_movie` po title-similarity matchuje
mirror → primary paradisehill, dodając tylko playback sources (mangoporn:luluvid,
:voe, …) które rozpakowują się na bezpośredni stream URL przez
`extract_stream_from_hoster`.
"""
from __future__ import annotations


def get_movie_connectors() -> list[tuple[str, type]]:
    """Zwraca listę (name, ConnectorCls) tuples w kolejności ingestu.

    Lazy import — uniknięcie circular import bo connectory zaczepiają db/models.
    """
    from app.connectors.dooplay import (
        MangopornConnector,
        PandamoviesConnector,
        StreampornVipConnector,
    )
    from app.connectors.paradisehill import ParadisehillConnector

    # Kolejność ingestu: paradisehill FIRST (canonical primary, mirrory się do
    # niego przyklejają), potem mangoporn (jedyny mirror z realnym new-content —
    # 72 nowych 2026-05-28; streamporn/pandamovies zwracają stale 0 new), na końcu
    # streamporn + pandamovies. Powód reorderu (2026-05-30): gdy streamporn wiesza
    # się intermittentnie, mangoporn musi zdążyć przed nim — patrz per-connector
    # timeout w _job_movie_ingest.
    # streamporn.nl padł (0 new od 2026-05-23) → zastąpiony żywym streamporn.vip
    # (StreampornVipConnector, ocena 2026-07-02). Stara klasa .nl zostaje w dooplay.py
    # dla backref istniejących origins `streamporn:*`, ale nie ingestujemy jej dalej.
    return [
        ("paradisehill", ParadisehillConnector),
        ("mangoporn", MangopornConnector),
        ("streampornvip", StreampornVipConnector),
        ("pandamovies", PandamoviesConnector),
    ]
