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

from app.database import get_db
from app.models_admin import FaqStatus
from app.schemas import ContentPageOut, FaqListResponse, FaqOut
from app.services.admin_service import (
    get_content_page,
    get_faq,
    list_faqs,
    serialize_content_page,
    serialize_faq,
)

router = APIRouter(tags=["user-content"])


@router.get(
    "/get-content",
    response_model=ContentPageOut,
    summary="Get admin-managed Privacy Policy or Terms content for the user app",
)
def get_user_content(
    content_type: str = Query(..., description="privacy_policy | terms_conditions"),
    db: Session = Depends(get_db),
):
    try:
        page = get_content_page(db, content_type)
    except ValueError as e:
        raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=str(e)) from e
    return serialize_content_page(page)


@router.get(
    "/list-faqs",
    response_model=FaqListResponse,
    summary="List admin-managed FAQs for the user app",
)
def list_user_faqs(
    db: Session = Depends(get_db),
    search: str | None = Query(None, description="Search question or answer"),
    skip: int = Query(0, ge=0),
    limit: int = Query(50, ge=1, le=200),
):
    rows, total = list_faqs(db, search=search, skip=skip, limit=limit, published_only=True)
    return FaqListResponse(
        total=total,
        skip=skip,
        limit=limit,
        faqs=[serialize_faq(f) for f in rows],
    )


@router.get(
    "/get-faq",
    response_model=FaqOut,
    summary="Get one admin-managed FAQ for the user app",
)
def get_user_faq(
    faq_id: int = Query(..., ge=1),
    db: Session = Depends(get_db),
):
    faq = get_faq(db, faq_id)
    if not faq or faq.status != FaqStatus.completed:
        raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="FAQ not found")
    return serialize_faq(faq)
