import re

from lib.clients.base import BaseClient
from lib.utils.general.utils import USER_AGENT_HEADER
from lib.utils.kodi.utils import translation


class Peerflix(BaseClient):
    def __init__(self, host, notification, language):
        super().__init__(host, notification)
        self.language = language.lower()

    def search(self, imdb_id, mode, media_type, season, episode):
        try:
            if mode == "tv" or media_type == "tv":
                url = f"{self.host}/language={self.language}/stream/series/{imdb_id}:{season}:{episode}.json"
            elif mode == "movies" or media_type == "movies":
                url = f"{self.host}/language={self.language}/stream/movie/{imdb_id}.json"
            res = self.session.get(url, headers=USER_AGENT_HEADER, timeout=10)
            if res.status_code != 200:
                return
            return self.parse_response(res)
        except Exception as e:
            self.handle_exception(f"{translation(30234)}: {e!s}")

    def parse_response(self, res):
        res = res.json()
        results = []
        for item in res["streams"]:
            results.append(
                {
                    "title": item["title"].splitlines()[0],
                    "type": "Torrent",
                    "indexer": "Peerflix",
                    "guid": item["infoHash"],
                    "infoHash": item["infoHash"],
                    "size": item["sizebytes"] or 0,
                    "seeders": item.get("seed", 0) or 0,
                    "languages": [item["language"]],
                    "fullLanguages": [item["language"]],
                    "provider": self.extract_provider(item["title"]),
                    "publishDate": "",
                    "peers": 0,
                }
            )
        return results

    def extract_provider(self, title):
        match = re.search(r"🌐.* ([^ \n]+)", title)
        return match.group(1) if match else ""
