#!/usr/bin/env python3
"""
Test script for enhanced Google search functionality
"""

import sys
import os
import time
import logging
from typing import Dict, Any

# Add current directory to path
sys.path.append('/var/www/html/WebSearchTool-Microservices')
sys.path.append('/var/www/html/WebSearchTool-Microservices/services/google-search')

# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)

def test_google_search_direct():
    """Test Google search directly without Kafka"""
    try:
        # Import the service
        from services.google_search.main import GoogleSearchService
        
        # Create mock request
        class MockRequest:
            def __init__(self):
                self.request_id = "test-001"
                self.query = "python programming"
                self.max_results = 5
                self.delay = 2
        
        # Initialize service
        logger.info("Initializing Google Search Service...")
        service = GoogleSearchService()
        
        # Create test request
        request = MockRequest()
        
        # Perform search
        logger.info(f"Performing search for: {request.query}")
        response = service.perform_search(request)
        
        # Display results
        logger.info(f"Search completed!")
        logger.info(f"Total results: {response.total_results}")
        logger.info(f"Processing time: {response.processing_time:.2f}s")
        
        if response.error:
            logger.error(f"Error: {response.error}")
        
        for i, result in enumerate(response.results):
            logger.info(f"\nResult {i+1}:")
            logger.info(f"  Title: {result.title}")
            logger.info(f"  URL: {result.url}")
            logger.info(f"  Snippet: {result.snippet[:100]}..." if result.snippet else "  Snippet: None")
        
        # Cleanup
        service.cleanup()
        
        return len(response.results) > 0
        
    except Exception as e:
        logger.error(f"Test failed with error: {e}")
        return False

def test_selenium_basic():
    """Test basic Selenium functionality"""
    try:
        from selenium import webdriver
        from selenium.webdriver.chrome.options import Options as ChromeOptions
        from selenium.webdriver.chrome.service import Service as ChromeService
        from webdriver_manager.chrome import ChromeDriverManager
        import stat
        
        logger.info("Testing basic Selenium functionality...")
        
        # Setup Chrome options
        options = ChromeOptions()
        options.add_argument("--headless=new")
        options.add_argument("--no-sandbox")
        options.add_argument("--disable-dev-shm-usage")
        options.add_argument("--disable-gpu")
        
        # Get driver path
        driver_path = ChromeDriverManager().install()
        if driver_path.endswith('THIRD_PARTY_NOTICES.chromedriver'):
            driver_dir = os.path.dirname(driver_path)
            actual_driver = os.path.join(driver_dir, 'chromedriver')
            if os.path.exists(actual_driver):
                driver_path = actual_driver
        
        # Fix permissions
        os.chmod(driver_path, stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP | stat.S_IROTH | stat.S_IXOTH)
        
        # Create driver
        service = ChromeService(driver_path)
        driver = webdriver.Chrome(service=service, options=options)
        
        # Test navigation
        driver.get("https://www.google.com")
        title = driver.title
        logger.info(f"Page title: {title}")
        
        # Cleanup
        driver.quit()
        
        return "Google" in title
        
    except Exception as e:
        logger.error(f"Selenium test failed: {e}")
        return False

def main():
    """Run all tests"""
    logger.info("Starting enhanced Google search tests...")
    
    # Test 1: Basic Selenium
    logger.info("\n" + "="*50)
    logger.info("TEST 1: Basic Selenium functionality")
    logger.info("="*50)
    
    selenium_ok = test_selenium_basic()
    logger.info(f"Selenium test result: {'PASS' if selenium_ok else 'FAIL'}")
    
    if not selenium_ok:
        logger.error("Selenium test failed, skipping search test")
        return False
    
    # Test 2: Google Search
    logger.info("\n" + "="*50)
    logger.info("TEST 2: Enhanced Google Search")
    logger.info("="*50)
    
    search_ok = test_google_search_direct()
    logger.info(f"Google search test result: {'PASS' if search_ok else 'FAIL'}")
    
    # Summary
    logger.info("\n" + "="*50)
    logger.info("TEST SUMMARY")
    logger.info("="*50)
    logger.info(f"Selenium test: {'PASS' if selenium_ok else 'FAIL'}")
    logger.info(f"Google search test: {'PASS' if search_ok else 'FAIL'}")
    
    overall_result = selenium_ok and search_ok
    logger.info(f"Overall result: {'PASS' if overall_result else 'FAIL'}")
    
    return overall_result

if __name__ == "__main__":
    success = main()
    sys.exit(0 if success else 1)
