from flask import Blueprint, request, jsonify
from app.extensions import db
from app.models.features import AuditLog

audit_bp = Blueprint("audit", __name__, url_prefix="/audit")


def log_action(user_id, action, resource_type=None, resource_id=None, details=None):
    entry = AuditLog(
        user_id=user_id,
        action=action,
        resource_type=resource_type,
        resource_id=resource_id,
        details=details,
        ip_address=request.remote_addr if request else None,
    )
    db.session.add(entry)
    db.session.commit()


@audit_bp.route("/")
def index():
    from functools import wraps
    from flask import redirect, url_for, flash, render_template
    from flask_login import login_required, current_user

    @login_required
    def _view():
        if not current_user.is_admin:
            flash("Access denied.", "error")
            return redirect(url_for("dashboard.index"))
        page = request.args.get("page", 1, type=int)
        q = request.args.get("q", "").strip()
        query = AuditLog.query
        if q:
            query = query.filter(AuditLog.action.ilike(f"%{q}%"))
        pagination = query.order_by(AuditLog.created_at.desc()).paginate(page=page, per_page=50, error_out=False)
        return render_template("admin/audit.html", pagination=pagination, q=q)
    return _view()
