from fastapi import APIRouter, Depends, HTTPException, status
from fastapi.params import Path, Query
from sqlalchemy.orm import Session
from src.apps.wine.retailer.schemas.retailer import (
    RetailerCreateSchema,
    RetailerListOutputSchema,
    RetailerUpdateSchema,
    RetailerOutputSchema,
    RetailerFilterSchema
)
from src.apps.wine.retailer.services.retailer import (
    get_all_retailers as get_all_retailers_service,
)
from src.core.dependencies import get_db
from src.utils import constants
from src.utils.guard import get_current_user
from src.apps.base.schemas.response_model import ResponseModel

router = APIRouter()


@router.get("", response_model=ResponseModel, summary="Get all retailers")
async def get_all_retailers(
    payload: RetailerFilterSchema = Depends(),
    sort_by: str = Query(
        default="-date_created",
        description=(
            "Sort by fields, prefix with '-' for descending order. "
            "Allowed fields: code, name, total_records, total_prices, job_date, date_start, date_end, date_created, last_updated. "
            "Multiple fields can be separated by commas."
        ),
    ),
    page: int = Query(default=1, ge=1, description="Page number"),
    per_page: int = Query(
        default=constants.DEFAULT_PER_PAGE,
        ge=1,
        le=constants.MAX_PER_PAGE,
        description="Items per page",
    ),
    paginated: bool = Query(
        default=True,
        description="Whether to paginate the results. If false, all results will be returned.",
    ),
    db: Session = Depends(get_db),
):
    response= await get_all_retailers_service(
        db=db, 
        page=page, 
        per_page=per_page, 
        payload=payload, 
        sort_by=sort_by.split(",") if sort_by else [],
        paginated=paginated
    )
    
    return ResponseModel(
        data=response, 
        status_code=status.HTTP_200_OK, 
        success=True,
        message="Retailers fetched successfully"
    )