"""Yandex search engine scraper."""

import logging
from typing import List
from urllib.parse import urlencode, quote

from .base_scraper import BaseScraper
from ..models.schemas import SearchResult

logger = logging.getLogger(__name__)

class YandexScraper(BaseScraper):
    """Yandex search engine scraper."""
    
    def __init__(self):
        super().__init__("yandex")
        self.base_url = "https://yandex.com/search/"
    
    def search(self, query: str, max_results: int = 10) -> List[SearchResult]:
        """Search Yandex for results."""
        results = []
        
        try:
            # Update headers for Yandex
            self.session.headers.update({
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
                'Accept-Language': 'en-US,en;q=0.5',
                'Accept-Encoding': 'gzip, deflate',
                'Connection': 'keep-alive',
            })
            
            params = {
                'text': query,
                'lr': 213,  # Moscow region
                'lang': 'en'
            }
            
            response = self._make_request(self.base_url, params)
            if not response:
                return results
            
            soup = self._parse_html(response.text)
            if not soup:
                return results
            
            # Yandex result selectors
            selectors = [
                '.organic__url-text',
                '.organic',
                '.serp-item',
                '.content',
                '.result'
            ]
            
            result_containers = []
            for selector in selectors:
                result_containers = soup.select(selector)
                if result_containers:
                    break
            
            for i, container in enumerate(result_containers[:max_results]):
                try:
                    # Extract title
                    title_elem = container.select_one('h2 a, h3 a, .organic__url-text, .organic__title-wrapper a')
                    title = title_elem.get_text(strip=True) if title_elem else ""
                    
                    # Extract URL
                    url = title_elem.get('href', '') if title_elem else ""
                    
                    # Extract description
                    desc_elem = container.select_one('.organic__text, .text-container, .snippet')
                    description = desc_elem.get_text(strip=True) if desc_elem else ""
                    
                    # Clean URL
                    if url and not url.startswith('http'):
                        if url.startswith('//'):
                            url = f"https:{url}"
                        elif url.startswith('/'):
                            url = f"https://yandex.com{url}"
                    
                    if title and url:
                        result = self._create_search_result(
                            title=title,
                            url=url,
                            description=description,
                            position=i + 1
                        )
                        results.append(result)
                        
                except Exception as e:
                    logger.error(f"Error parsing Yandex result {i}: {e}")
                    continue
            
            logger.info(f"Yandex: Found {len(results)} results for '{query}'")
            
        except Exception as e:
            logger.error(f"Yandex search error: {e}")
        
        return results
