import requests
from typing import Tuple
from .base import MarketplaceService


class WooCommerceService(MarketplaceService):
    """Сервис для работы с WooCommerce API"""

    def _get_api_url(self) -> str:
        """Получить базовый URL для WooCommerce REST API"""
        base = self.config.store_url.rstrip('/')
        # WooCommerce REST API v3 endpoint
        return f"{base}/wp-json/wc/v3/"

    def _get_auth(self) -> tuple:
        """Получить кортеж для Basic Auth (consumer_key, consumer_secret)"""
        return (self.config.consumer_key or '', self.config.consumer_secret or '')

    def test_connection(self) -> Tuple[bool, str]:
        """
        Проверить соединение с WooCommerce API.

        Использует endpoint /wp-json/wc/v3/ для проверки.
        Аутентификация через HTTP Basic Auth.
        """
        if not self.config.store_url:
            return False, 'Не указан URL магазина'

        if not self.config.consumer_key or not self.config.consumer_secret:
            return False, 'Не указаны ключи API'

        url = self._get_api_url()

        try:
            # Пытаемся получить список товаров (limit=1) для проверки авторизации
            # Это более надёжный способ проверки, чем просто обращение к корню API
            response = requests.get(
                f"{url}products",
                params={'per_page': 1},
                auth=self._get_auth(),
                timeout=15
            )

            if response.status_code == 200:
                return True, 'Соединение установлено успешно'
            elif response.status_code == 401:
                return False, 'Неверные ключи API (Consumer Key/Secret)'
            elif response.status_code == 403:
                return False, 'Доступ запрещён. Проверьте права API ключа'
            elif response.status_code == 404:
                return False, 'WooCommerce REST API не найден. Проверьте, что WooCommerce установлен и активирован'
            else:
                return False, f'Ошибка соединения: HTTP {response.status_code}'

        except requests.exceptions.Timeout:
            return False, 'Таймаут соединения (15 сек)'
        except requests.exceptions.ConnectionError:
            return False, 'Не удалось подключиться к серверу. Проверьте URL магазина'
        except Exception as e:
            return False, f'Ошибка: {str(e)}'

    def sync(self) -> Tuple[bool, str]:
        """Выполнить синхронизацию с WooCommerce"""
        # TODO: реализовать синхронизацию
        return True, 'Синхронизация запущена (заглушка)'

    def fetch_orders(self, limit: int = 50):
        """Получить заказы с WooCommerce"""
        # TODO: реализовать
        pass

    def push_products(self, products):
        """Отправить товары на WooCommerce"""
        # TODO: реализовать
        pass
