import logging
import requests

from pypos.core.base_service import BaseService
from pypos.core.utils.http_json_utils import parse_json_response


LOGGER = logging.getLogger(__name__)


class DashboardAssetService(BaseService):
    def __init__(self, http_client=None):
        super().__init__(http_client=http_client or requests)

    def _build_ui_assets_url(self, base_url: str, endpoint: str) -> str:
        safe_base = str(base_url or "").rstrip("/")
        safe_endpoint = str(endpoint or "").strip()
        if safe_endpoint and not safe_endpoint.startswith("/"):
            safe_endpoint = "/" + safe_endpoint
        if not safe_base or not safe_endpoint:
            return ""
        return f"{safe_base}{safe_endpoint}"

    def fetch_ui_assets_payload(self, *, base_url: str, endpoint: str, machine_id: str, timeout: int):
        url = self._build_ui_assets_url(base_url, endpoint)
        if not url:
            return {}
        try:
            resp = self.request_with_retry(
                "GET",
                url,
                params={
                    "cabang_id": "none",
                    "machine_id": machine_id,
                },
                timeout=timeout,
                retry_on=(requests.RequestException,),
            )
            data = parse_json_response(resp, label="dashboard_ui_assets")
            return data if isinstance(data, dict) else {}
        except (TypeError, ValueError, KeyError, AttributeError, RuntimeError, OSError, LookupError, ArithmeticError, ImportError) as exc:
            LOGGER.warning("Gagal fetch payload UI assets: %s", exc)
            return {}

    def download_logo_content(self, logo_url: str, timeout: int) -> bytes:
        if not logo_url:
            return b""
        try:
            resp = self.request_with_retry(
                "GET",
                logo_url,
                timeout=timeout,
                retry_on=(requests.RequestException,),
            )
            return resp.content or b""
        except (TypeError, ValueError, KeyError, AttributeError, RuntimeError, OSError, LookupError, ArithmeticError, ImportError) as exc:
            LOGGER.warning("Gagal download logo: %s", exc)
            return b""
