from flask import Blueprint, render_template, request, jsonify
from flask_login import login_required, current_user
from app.extensions import db
from app.models.report import Report
from app.models.features import SearchIndex

search_bp = Blueprint("search", __name__, url_prefix="/search")


@search_bp.route("/")
@login_required
def index():
    q = request.args.get("q", "").strip()
    results = []
    if q:
        reports = Report.query.filter_by(user_id=current_user.id).filter(
            (Report.project_name.ilike(f"%{q}%")) |
            (Report.project_description.ilike(f"%{q}%"))
        ).order_by(Report.created_at.desc()).limit(20).all()
        if not reports:
            try:
                from app.ai.diamond import call_ai, run_sync
                all_reports = Report.query.filter_by(user_id=current_user.id).all()
                reports_text = "\n".join([f"ID:{r.id} | {r.project_name} | {r.project_description[:200]}" for r in all_reports])
                prompt = f"""Given these reports:\n{reports_text}\n\nUser is searching for: "{q}"\nReturn the IDs of the most relevant reports as JSON array: [1, 5, 3]\nIf none match, return []"""
                messages = [{"role": "system", "content": "Return only valid JSON array of report IDs."}, {"role": "user", "content": prompt}]
                result = run_sync(call_ai(messages, model_type="fast"))
                import json
                try:
                    ids = json.loads(result)
                    if ids:
                        reports = Report.query.filter(Report.id.in_(ids), Report.user_id == current_user.id).all()
                except Exception:
                    pass
            except Exception:
                pass
        results = reports
    return render_template("search/index.html", results=results, q=q)


@search_bp.route("/api/quick")
@login_required
def quick_search():
    q = request.args.get("q", "").strip()
    if not q or len(q) < 2:
        return jsonify([])
    reports = Report.query.filter_by(user_id=current_user.id).filter(
        (Report.project_name.ilike(f"%{q}%")) |
        (Report.project_description.ilike(f"%{q}%"))
    ).limit(5).all()
    return jsonify([{"id": r.id, "name": r.project_name, "verdict": r.verdict} for r in reports])
