import os
from flask import Blueprint, render_template, request
from flask_login import login_required, current_user
from datetime import datetime
from app import db
from app.models import MunicipalityCache, LookupLog
from app.services.research_client import fetch_municipal_data
from app.services.ai_client import summarize_sign_codes

lookups_bp = Blueprint("lookups", __name__, url_prefix="/lookups")


@lookups_bp.route("/", methods=["GET", "POST"])
@login_required
def run_lookup():
    ai_summary = None
    muni_data = None
    municipality = None
    zoning = None
    geo = {}

    if request.method == "POST":
        query = request.form.get("query", "").strip()
        input_type = request.form.get("input_type", "address")

        # Simple geolocation extraction placeholder
        geo = {"lat": "Unknown", "lon": "Unknown"}

        # Basic parsing for municipality name (could be improved later)
        municipality = query.split(",")[0].strip().title()

        # Check cache first
        cache = MunicipalityCache.query.filter_by(municipality=municipality).first()
        if cache:
            print(f"Using cached data for {municipality}")
            muni_data = cache.data
        else:
            print(f"Fetching new data for {municipality}")
            muni_data = fetch_municipal_data(municipality)
            if muni_data and not muni_data.startswith("("):  # avoid error text
                new_cache = MunicipalityCache(
                    municipality=municipality,
                    data=muni_data,
                    updated_at=datetime.utcnow()
                )
                db.session.add(new_cache)
                db.session.commit()

        # Get zoning placeholder (future enhancement)
        zoning = ""

        # Generate AI summary
        ai_summary = summarize_sign_codes(municipality, zoning, muni_data, geo)

        # Log lookup
        lookup_log = LookupLog(
            user_id=current_user.id,
            input_type=input_type,
            input_value=query,
            municipality=municipality,
            zoning=zoning,
            created_at=datetime.utcnow(),
        )
        db.session.add(lookup_log)
        db.session.commit()

    return render_template(
        "lookup.html",
        ai_summary=ai_summary,
        municipality=municipality,
        zoning=zoning,
    )
