"""لیست‌های طولانی: پیش‌فرض فقط LIST_PAGE_SIZE ردیف ساخته می‌شه (رندر هزاران ردیف سایت رو کند می‌کرد)
و دکمه‌ی «نمایش تمامی ...» همون صفحه رو با همه‌ی فیلترهای فعلی و show_all=1 باز می‌کنه."""
from flask import request, url_for

from config import LIST_PAGE_SIZE


def show_all_requested() -> bool:
    return request.args.get("show_all") == "1"


def page_limit():
    """حد ردیف‌های این درخواست؛ None یعنی همه."""
    return None if show_all_requested() else LIST_PAGE_SIZE


def cut(rows):
    """برای لیست‌هایی که کامل در پایتون ساخته می‌شن (مثل گزارش‌ها)."""
    limit = page_limit()
    return rows if limit is None else rows[:limit]


def show_all_url() -> str:
    """آدرس همین صفحه + show_all=1، با حفظ همه‌ی فیلترها (حتی فیلترهای چندانتخابی مثل شهرها و تگ‌ها)."""
    params = request.args.to_dict(flat=False)
    params["show_all"] = ["1"]
    params.update(request.view_args or {})
    return url_for(request.endpoint, **params)
