import requests
import logging
from abc import ABC, abstractmethod
from typing import List
from core.models import Event

logger = logging.getLogger(__name__)

HEADERS = {
    'User-Agent': (
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
        'AppleWebKit/537.36 (KHTML, like Gecko) '
        'Chrome/120.0.0.0 Safari/537.36'
    ),
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'en-US,en;q=0.9',
}


class BaseScraper(ABC):

    def __init__(self, name: str):
        self.name = name
        self.session = requests.Session()
        self.session.headers.update(HEADERS)

    @abstractmethod
    def get_events(self, sport: str) -> List[Event]:
        """Fetch pre-match events for a given sport."""
        pass

    def get_all_events(self) -> List[Event]:
        all_events: List[Event] = []
        for sport in ['football', 'basketball', 'tennis']:
            try:
                events = self.get_events(sport)
                all_events.extend(events)
                logger.info(f"[{self.name}] {sport}: {len(events)} events")
            except Exception as e:
                logger.error(f"[{self.name}] {sport} fetch failed: {e}")
        return all_events
