# Web search functionality for NovaChat
from duckduckgo_search import DDGS

from duckduckgo_search import DDGS
from googlesearch import search
from typing import List


def fetch_ddg(query, max_results=5):
    """Perform DuckDuckGo search returning titles and URLs"""
    try:
        with DDGS() as ddgs:
            return [{"title": r['title'], "url": r['href']} 
                    for r in ddgs.text(query, max_results=max_results)]
    except Exception as e:
        return [{"error": str(e)}]


def fetch_google(query, num_results=5):
    """Perform Google search returning titles and URLs"""
    try:
        return [{"title": result, "url": result} 
               for result in search(query, num=num_results, stop=num_results)]
    except Exception as e:
        return [{"error": str(e)}]

def fetch_torrents(query: str, max_results: int = 5) -> List[str]:
    items = list(google_search(f"{query} torrent", num_results=max_results))
    results = []
    for item in items[:max_results]:
        url = item.get("href")
        title, snippet = scrape_page(url)
        results.append(f"{title}\n{snippet}\n{url}")
    return results

# Example usage (can be removed or moved)
if __name__ == '__main__':
    search_query = "python web frameworks"
    ddg_results = fetch_ddg(search_query)
    print(f"DuckDuckGo results for '{search_query}':")
    for i, result in enumerate(ddg_results):
        if 'error' in result:
            print(f"Error: {result['error']}")
            break
        if 'message' in result:
            print(result['message'])
            break
        print(f"{i+1}. {result['title']}")
        print(f"   Link: {result['link']}")
        print(f"   Snippet: {result['snippet'][:100]}...")
        print("---")