"""Activity feed routes (thin). All logic lives in :mod:`app.activity.services`."""

from __future__ import annotations

from flask import flash, redirect, render_template, request, url_for
from flask_login import current_user, login_required

from app.activity import activity_bp, services


@activity_bp.route("/")
@login_required
def index():
    """The user's activity feed — paginated, with unread + category filters."""
    page = request.args.get("page", 1, type=int)
    unread_only = request.args.get("unread") == "1"
    category = (request.args.get("category") or "all").strip()
    pagination, items = services.get_user_activity(
        current_user, page=page, per_page=20, unread_only=unread_only, category=category
    )
    return render_template(
        "activity/list.html",
        pagination=pagination,
        items=items,
        sections=services.group_by_date(items),
        unread_only=unread_only,
        category=category,
        categories=services.ACTIVITY_CATEGORIES,
        unread_count=services.unread_count(current_user),
    )


@activity_bp.route("/<int:activity_id>/read", methods=["POST"])
@login_required
def mark_read(activity_id: int):
    services.mark_activity_read(activity_id, current_user)
    return redirect(request.form.get("next") or url_for("activity.index"))


@activity_bp.route("/mark-all-read", methods=["POST"])
@login_required
def mark_all_read():
    updated = services.mark_all_read(current_user)
    if updated:
        flash(f"Marked {updated} item{'' if updated == 1 else 's'} as read.", "success")
    return redirect(url_for("activity.index"))


@activity_bp.route("/clear-read", methods=["POST"])
@login_required
def clear_read():
    removed = services.clear_read(current_user)
    if removed:
        flash(f"Cleared {removed} read item{'' if removed == 1 else 's'}.", "success")
    return redirect(url_for("activity.index"))
