"""
Cin7 API client — fetch Products, Categories, Brands, Contacts
"""
import requests
from requests.auth import HTTPBasicAuth
from config import CIN7_BASE_URL, CIN7_USERNAME, CIN7_PASSWORD


class Cin7Api:

    def __init__(self):
        self.auth = HTTPBasicAuth(CIN7_USERNAME, CIN7_PASSWORD)
        self.session = requests.Session()
        self.session.auth = self.auth

    def _get(self, endpoint, params=None):
        url = f"{CIN7_BASE_URL}/{endpoint}"
        resp = self.session.get(url, params=params, timeout=30)
        resp.raise_for_status()
        return resp.json()

    def get_products(self, modified_since=None):
        """Fetch all products with optional date filter"""
        params = {}
        if modified_since:
            params["modifiedSince"] = modified_since
        return self._get("Products", params)

    def get_categories(self):
        """Fetch all product categories"""
        return self._get("ProductCategories")

    def get_brands(self):
        """Fetch all brands"""
        return self._get("Brands")

    def get_contacts(self, contact_type=None):
        """Fetch contacts, optionally filtered by type (Customer/Supplier)"""
        params = {}
        if contact_type:
            params["contactType"] = contact_type
        return self._get("Contacts", params)

    def get_product_options(self, product_id):
        """Fetch SKU options for a specific product"""
        return self._get(f"Products/{product_id}/Options")

    def get_product_images(self, product_id):
        """Fetch images for a specific product"""
        return self._get(f"Products/{product_id}/Images")

    def test_connection(self):
        """Verify API credentials work"""
        try:
            self.get_categories()
            return True
        except Exception as e:
            print(f"[Cin7] Connection failed: {e}")
            return False