from ._client import AbstractApiClient, Response, default_retry


class ApiClient(AbstractApiClient):
    VERSION = "2.0"

    def __init__(self, base_url: str, api_key: str):
        super().__init__(
            base_url=base_url,
            retry=default_retry(),
        )
        self.session.headers.update({"Authorization": f"Api-Key {api_key}"})

    def get_info(self, **kwargs) -> Response:
        return self._request("GET", "/api/v2/info", **kwargs)

    def get_version(self, **kwargs) -> Response:
        return self._request("GET", "/api/v2/version", **kwargs)

    def get_show(self, item_id: int, **kwargs) -> Response:
        return self._request("GET", f"/api/v2/shows/{item_id}", **kwargs)

    def get_show_instance(self, item_id: int, **kwargs) -> Response:
        return self._request("GET", f"/api/v2/show-instances/{item_id}", **kwargs)

    def list_schedule(self, **kwargs) -> Response:
        return self._request("GET", "/api/v2/schedule", **kwargs)

    def get_webstream(self, item_id: int, **kwargs) -> Response:
        return self._request("GET", f"/api/v2/webstreams/{item_id}", **kwargs)

    def get_file(self, item_id: int, **kwargs) -> Response:
        return self._request("GET", f"/api/v2/files/{item_id}", **kwargs)

    def update_file(self, item_id: int, **kwargs) -> Response:
        return self._request("PATCH", f"/api/v2/files/{item_id}", **kwargs)

    def download_file(self, item_id: int, **kwargs) -> Response:
        return self._request("GET", f"/api/v2/files/{item_id}/download", **kwargs)

    def get_stream_preferences(self, **kwargs) -> Response:
        return self._request("GET", "/api/v2/stream/preferences", **kwargs)

    def get_stream_state(self, **kwargs) -> Response:
        return self._request("GET", "/api/v2/stream/state", **kwargs)