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

from app.services.permissions import require
from app.services.activity_logger import log_action
from app.services import customer_service
from config import CUSTOMER_RATINGS

bp = Blueprint("dashboard", __name__, url_prefix="")


@bp.route("/")
@login_required
@require("dashboard")
def index():
    search = request.args.get("q", "").strip()
    city = request.args.get("city") or None
    status = request.args.get("status") or None
    rating = request.args.get("rating") or None
    sort = request.args.get("sort", "joined_desc")

    customers = customer_service.list_customers(
        search=search, city=city, status=status, rating=rating, sort=sort
    )
    cities = customer_service.distinct_cities()

    if search:
        log_action(current_user, "search", "customer", details={"query": search})

    return render_template(
        "dashboard/index.html",
        customers=customers, cities=cities,
        statuses=customer_service.STATUS_CHOICES, ratings=CUSTOMER_RATINGS,
        sorts=customer_service.SORT_OPTIONS,
        q=search, selected_city=city, selected_status=status,
        selected_rating=rating, selected_sort=sort,
    )
