from lib.api.debrid.base import DebridClient, ProviderException


class EasyDebrid(DebridClient):
    BASE_URL = "https://easydebrid.com/api/v1"

    def __init__(self, token, user_ip):
        self.user_ip = user_ip
        super().__init__(token)

    def initialize_headers(self):
        self.headers = {"Authorization": f"Bearer {self.token}"}
        if self.user_ip:
            self.headers["X-Forwarded-For"] = self.user_ip

    def disable_access_token(self):
        pass

    def _handle_service_specific_errors(self, error_data: dict, status_code: int):
        error_code = error_data.get("error")
        if error_code == "Unsupported link for direct download.":
            raise ProviderException(
                "Unsupported link for direct download.",
            )

    def _make_request(
        self,
        method: str,
        url: str,
        data=None,
        params=None,
        json=None,
        is_return_none: bool = False,
        is_expected_to_fail: bool = False,
    ):
        params = params or {}
        url = self.BASE_URL + url
        return super()._make_request(
            method,
            url,
            data,
            params=params,
            json=json,
            is_return_none=is_return_none,
            is_expected_to_fail=is_expected_to_fail,
        )

    def get_torrent_instant_availability(self, urls):
        return self._make_request(
            "POST",
            "/link/lookup",
            json={"urls": urls},
        )

    def create_download_link(self, magnet):
        return self._make_request(
            "POST",
            "/link/generate",
            json={"url": magnet},
        )

    def get_user_info(self):
        return self._make_request("GET", "/user/details")
