"""The image sourcing list: /images, for the client to choose which official images to chase.

Source of truth: app/services/image_ask.py. Reads only, computed on every request; open to
every account that can see the client pages (`client.view`).
"""

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session

from app.db import get_db
from app.services import image_ask

router = APIRouter(prefix="/api/images", tags=["images"])

_GROUP = "^(alcohol|perfume|cosmetics)$"


@router.get("/recommended")
def read_recommended(
    mode: str = Query(default="product", pattern="^(product|brand)$"),
    limit: int = Query(default=image_ask.RECOMMENDED, ge=1, le=200),
    db: Session = Depends(get_db),
) -> dict:
    return image_ask.recommended(db, mode=mode, limit=limit)


@router.get("/products")
def read_products(
    group: str | None = Query(default=None, pattern=_GROUP),
    brand: str | None = None,
    q: str | None = None,
    missing: bool = False,
    page: int = Query(default=1, ge=1),
    per_page: int = Query(default=100, ge=1, le=image_ask.PAGE_MAX),
    db: Session = Depends(get_db),
) -> dict:
    return image_ask.products(db, group=group, brand=brand, q=q, missing=missing, page=page, per_page=per_page)


@router.get("/brands")
def read_brands(
    group: str | None = Query(default=None, pattern=_GROUP),
    db: Session = Depends(get_db),
) -> dict:
    return image_ask.brands(db, group=group)
