from flask import Blueprint, abort, render_template, request
from flask_login import current_user

from app.extensions import db
from app.models import CauseCategory, DonationCause
from app.models.enums import CauseStatus

bp = Blueprint("seva_daan", __name__, url_prefix="/seva-daan")


@bp.route("/")
def list_causes():
    query = DonationCause.query.filter_by(status=CauseStatus.PUBLISHED)
    category_id = request.args.get("category_id", type=int)
    q = request.args.get("q", "").strip()
    if category_id:
        query = query.filter(DonationCause.cause_category_id == category_id)
    if q:
        query = query.filter(DonationCause.name.ilike(f"%{q}%"))
    causes = query.order_by(DonationCause.created_at.desc()).all()
    return render_template(
        "seva_daan/list.html",
        causes=causes,
        categories=CauseCategory.query.filter_by(is_active=True).order_by(CauseCategory.name).all(),
    )


@bp.route("/<int:cause_id>")
def detail(cause_id):
    cause = db.session.get(DonationCause, cause_id)
    if not cause or cause.status != CauseStatus.PUBLISHED:
        abort(404)
    return render_template("seva_daan/detail.html", cause=cause, employee=current_user.employee if current_user.is_authenticated else None)
