from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
from fastapi.security import HTTPBearer
from db.session import get_db
from db.models.section import Section

router = APIRouter()
security = HTTPBearer()

@router.get("/sections-list")
async def get_sections(
    sort_by: str = "id",
    sort_order: str = "asc",
    db: Session = Depends(get_db)
):
    """
    Retrieve a list of sections.
    """

    # Validate sort field
    if not hasattr(Section, sort_by):
        raise HTTPException(
            status_code=status.HTTP_400_BAD_REQUEST,
            detail=f"Invalid sort field: {sort_by}"
        )

    # Build query with sorting
    query = db.query(Section)
    if sort_order.lower() == "desc":
        query = query.order_by(getattr(Section, sort_by).desc())
    else:
        query = query.order_by(getattr(Section, sort_by).asc())

    section_count = query.count()
    section_list = query.all()

    if not section_list:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="No sections found"
        )

    return JSONResponse(
        content={
            "sections": jsonable_encoder(section_list),
            "count": section_count,
            "status_code": status.HTTP_200_OK,
            "message": "Sections retrieved successfully"
        },
        status_code=status.HTTP_200_OK
    )
