import requests
import logging

logger = logging.getLogger(__name__)


class BingConnector:
    """Connect to Bing Webmaster Tools API."""

    BASE_URL = "https://ssl.bing.com/webmaster/api.svc"

    def __init__(self, api_key, site_url):
        self.api_key = api_key
        self.site_url = site_url.rstrip("/")
        self.params = {"apikey": self.api_key, "siteUrl": self.site_url}

    # ------------------------------------------------------------------
    def _get(self, endpoint, extra_params=None):
        """Make a GET request to Bing Webmaster API."""
        try:
            params = {**self.params}
            if extra_params:
                params.update(extra_params)
            resp = requests.get(
                f"{self.BASE_URL}/{endpoint}",
                params=params,
                timeout=15,
            )
            resp.raise_for_status()
            return resp.json()
        except Exception as e:
            logger.error(f"Bing API {endpoint} failed: {e}")
            return None

    # ------------------------------------------------------------------
    def get_query_stats(self, period="Month"):
        """Get search query statistics."""
        data = self._get("json/GetQueryStats")
        if data:
            return data[:50]  # Top 50
        return []

    # ------------------------------------------------------------------
    def get_page_stats(self, period="Month"):
        """Get page traffic statistics."""
        data = self._get("json/GetPageStats")
        if data:
            return data[:50]
        return []

    # ------------------------------------------------------------------
    def get_crawl_stats(self):
        """Get crawl statistics."""
        data = self._get("json/GetCrawlStats")
        return data or {}

    # ------------------------------------------------------------------
    def submit_url(self, url):
        """Submit a URL to Bing for indexing."""
        try:
            resp = requests.post(
                f"{self.BASE_URL}/json/SubmitUrl",
                params={"apikey": self.api_key, "siteUrl": self.site_url, "url": url},
                timeout=15,
            )
            return resp.status_code == 200
        except Exception as e:
            logger.error(f"Bing URL submission failed: {e}")
            return False

    # ------------------------------------------------------------------
    def submit_url_indexnow(self, url, indexnow_key):
        """Submit a URL via IndexNow for instant indexing on Bing and other engines."""
        try:
            payload = {
                "host": self.site_url.replace("https://", "").replace("http://", ""),
                "key": indexnow_key,
                "urlList": [url],
            }
            resp = requests.post(
                "https://api.indexnow.org/indexnow",
                json=payload,
                headers={"Content-Type": "application/json"},
                timeout=15,
            )
            return resp.status_code in [200, 202]
        except Exception as e:
            logger.error(f"IndexNow submission failed: {e}")
            return False
