#!/usr/bin/env python3
"""
Minimal working example for programmatic access to Local Deep Research.

This shows how to use the core functionality without database dependencies.
"""

from langchain_ollama import ChatOllama
from local_deep_research.search_system import AdvancedSearchSystem

# Re-enable logging after import (it gets disabled in __init__.py)
from loguru import logger
import sys

logger.remove()
# diagnose=False: loguru defaults to True, which renders repr() of every
# local in every traceback frame on exception. Users copy this snippet
# into their own scripts, so leaving the default on would propagate the
# credential-in-traceback leak (#4185) wherever the snippet lands.
logger.add(
    sys.stderr,
    level="WARNING",
    format="{time} {level} {message}",
    diagnose=False,
)
logger.enable("local_deep_research")


class MinimalSearchEngine:
    """Minimal search engine that returns hardcoded results."""

    def __init__(self, settings_snapshot=None):
        self.settings_snapshot = settings_snapshot or {}

    def run(self, query, research_context=None):
        """Return some fake search results."""
        return [
            {
                "title": "Introduction to AI",
                "link": "https://example.com/ai-intro",
                "snippet": "Artificial Intelligence (AI) is the simulation of human intelligence...",
                "full_content": "Full article about AI basics...",
                "rank": 1,
            },
            {
                "title": "Machine Learning Explained",
                "link": "https://example.com/ml-explained",
                "snippet": "Machine learning is a subset of AI that enables systems to learn...",
                "full_content": "Detailed explanation of machine learning...",
                "rank": 2,
            },
        ]


def main():
    """Minimal example of programmatic access."""
    print("=== Minimal Local Deep Research Example ===\n")

    # 1. Create LLM
    print("1. Creating Ollama LLM...")
    llm = ChatOllama(model="gemma3:12b")

    # 2. Create minimal search engine
    print("2. Creating minimal search engine...")

    # Settings for search system (without programmatic_mode)
    settings = {
        "search.iterations": 1,
        "search.strategy": "direct",
    }

    search = MinimalSearchEngine(settings)

    # 3. Create search system
    print("3. Creating AdvancedSearchSystem...")
    # IMPORTANT: Pass programmatic_mode=True to avoid database dependencies
    system = AdvancedSearchSystem(
        llm=llm,
        search=search,
        settings_snapshot=settings,
        programmatic_mode=True,
    )

    # 4. Run a search
    print("\n4. Running search...")
    result = system.analyze_topic("What is artificial intelligence?")

    # 5. Show results
    print("\n=== RESULTS ===")
    print(f"Found {len(result['findings'])} findings")
    print(f"\nSummary:\n{result['current_knowledge']}")

    print("\n✓ Success! Programmatic access works without database.")


if __name__ == "__main__":
    main()
