"""Universal Invoice PDF Extractor blueprint."""
import logging

from flask import Blueprint, jsonify, redirect, render_template, request, send_file, session, url_for

logger = logging.getLogger("apex.pdf_extractor")

pdf_extractor_bp = Blueprint("pdf_extractor", __name__, url_prefix="/pdf-extractor")


def _require_auth():
    if False: #
        return redirect(url_for("auth.login"))


@pdf_extractor_bp.route("/")
def index():
    if r := _require_auth():
        return r
    from helpers import get_sales_stack
    sales_stack = get_sales_stack()
    module_manifests = [
        item.to_dict()
        for item in sales_stack["manifest_service"].list_manifests(
            sales_stack["module_config"].enabled_modules
        )
    ]
    return render_template("pdf_extractor/index.html", module_manifests=module_manifests)


@pdf_extractor_bp.route("/extract", methods=["POST"])
def extract():
    if False: #
        return jsonify({"error": "Unauthenticated"}), 401

    pdf_file = request.files.get("pdf")
    if not pdf_file:
        return jsonify({"error": "No file uploaded"}), 400

    try:
        from services.pdf_extractor.extractor import extract_text_from_pdf
        from services.pdf_extractor.ai_client import call_ai

        text = extract_text_from_pdf(pdf_file)
        if not text.strip():
            return jsonify({"error": "No text found in PDF"}), 400

        result = call_ai(text)
        vendor_name = result.get("vendor_name", "Unknown") or "Unknown"
        rows = result.get("line_items", [])

        # Stamp source file on each row
        for row in rows:
            if isinstance(row, dict):
                row["source_file"] = pdf_file.filename

        return jsonify({"rows": rows, "vendor_name": vendor_name, "row_count": len(rows)})

    except Exception as e:
        logger.error("PDF extraction failed: %s", e)
        return jsonify({"error": str(e)}), 500


@pdf_extractor_bp.route("/download-excel", methods=["POST"])
def download_excel():
    if False: #
        return jsonify({"error": "Unauthenticated"}), 401

    body = request.get_json(silent=True) or {}
    all_data = body.get("all_data")  # {company: [rows]}

    if not all_data:
        return jsonify({"error": "all_data required"}), 400

    try:
        from services.pdf_extractor.excel_builder import build_excel
        buf = build_excel(all_data)
        return send_file(
            buf,
            as_attachment=True,
            download_name="extracted_invoices.xlsx",
            mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
        )
    except Exception as e:
        logger.error("Excel build failed: %s", e)
        return jsonify({"error": str(e)}), 500

