"""
Example script for using the news search handler.
"""

import asyncio
import sys
import os
from datetime import datetime

# Add the project root to the Python path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../..')))

from execution.search_executor import SearchExecutor
from query.query_processor import get_query_processor
from config.config import get_config


async def main():
    """Run a sample news search."""
    # Initialize components
    query_processor = get_query_processor()
    search_executor = SearchExecutor()
    
    # Get a list of available search engines
    available_engines = search_executor.get_available_search_engines()
    print(f"Available search engines: {', '.join(available_engines)}")
    
    # Check if news search is available
    if "news" not in available_engines:
        print("News search is not available. Please check your NewsAPI configuration.")
        return
    
    # Prompt for the query
    query = input("Enter your query about recent events: ") or "Trump tariffs latest announcement"
    
    print(f"\nProcessing query: {query}")
    
    # Process the query
    start_time = datetime.now()
    structured_query = await query_processor.process_query(query)
    
    # Generate search queries optimized for each engine
    structured_query = await query_processor.generate_search_queries(
        structured_query, ["news"]
    )
    
    # Print the optimized queries
    print("\nOptimized queries for news search:")
    for i, q in enumerate(structured_query.get("search_queries", {}).get("news", [])):
        print(f"{i+1}. {q}")
    
    # Execute the search
    results = await search_executor.execute_search_async(
        structured_query, 
        search_engines=["news"],
        num_results=10
    )
    
    # Print the results
    news_results = results.get("news", [])
    print(f"\nFound {len(news_results)} news results:")
    
    for i, result in enumerate(news_results):
        print(f"\n--- Result {i+1} ---")
        print(f"Title: {result.get('title', 'No title')}")
        print(f"Source: {result.get('source', 'Unknown')}")
        print(f"Date: {result.get('published_date', 'Unknown date')}")
        print(f"URL: {result.get('url', 'No URL')}")
        print(f"Snippet: {result.get('snippet', 'No snippet')[0:200]}...")
    
    end_time = datetime.now()
    print(f"\nSearch completed in {(end_time - start_time).total_seconds():.2f} seconds")


if __name__ == "__main__":
    asyncio.run(main())