# arXiv search functionality for NovaChat
import arxiv

def fetch_arxiv(query, max_results=5):
    """Searches academic papers on arXiv based on a query."""
    results = []
    try:
        # Construct the default API client.
        client = arxiv.Client()

        # Search for papers matching the query.
        search = arxiv.Search(
            query=query,
            max_results=max_results,
            sort_by=arxiv.SortCriterion.Relevance
        )

        papers = list(client.results(search))

        if not papers:
            return [{'message': f"No arXiv papers found for: {query}"}]

        for paper in papers:
            results.append({
                'title': paper.title,
                'authors': [str(author) for author in paper.authors],
                'summary': paper.summary,
                'published': str(paper.published),
                'pdf_url': paper.pdf_url,
                'arxiv_url': paper.entry_id
            })

    except Exception as e:
        print(f"Error fetching arXiv results: {e}")
        return [{'error': f"arXiv API Error: {e}"}]

    return results

# Example usage (can be removed or moved)
if __name__ == '__main__':
    search_query = "quantum computing algorithms"
    arxiv_results = fetch_arxiv(search_query)
    print(f"arXiv results for '{search_query}':")
    for i, result in enumerate(arxiv_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"   Authors: {', '.join(result['authors'])}")
        print(f"   Published: {result['published']}")
        print(f"   PDF: {result['pdf_url']}")
        # print(f"   Summary: {result['summary'][:150]}...") # Uncomment for summary
        print("---")