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

from src.apps.base.schemas.response_model import ResponseModel
from src.utils import constants
from src.core.dependencies import get_db
from src.utils.constants import MAX_PER_PAGE
from typing import Optional
from src.apps.rollup.services.rp_rollup import execute_rp_rollup
from src.apps.rollup.services.rollup_log import get_all_rollup_logs
from src.apps.rollup.schemas.rollup import RollupLogFilterSchema,RollupLogResponse

router = APIRouter(prefix="", tags=["Rollups"])

@router.get("/logs", response_model=ResponseModel, summary="Get all rollup logs")
async def get_all_rollup_logs_list(
    payload: RollupLogFilterSchema = Depends(),
    sort_by: str = Query(
        default="-created_at",
    ),
    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"),
    db: Session = Depends(get_db),
):
    response= await get_all_rollup_logs(
        db=db, 
        page=page, 
        per_page=per_page, 
        payload=payload, 
        paginated=paginated,
        sort_by=sort_by.split(",") if sort_by else []
    )
    
    return ResponseModel(
        data=response, 
        status_code=status.HTTP_200_OK, 
        success=True,
        message="Record fetched successfully"
    )
    
@router.get("/execute-rp-rollup", response_model=ResponseModel, summary="Execute RP Rollup for a specific retailer")
async def execute_rp_rollup_for_retailer(
    db: Session = Depends(get_db),
):
    """
    Execute RP Rollup for a specific retailer.
    Args:
        db (Session): Database session.
    Returns:
        ResponseModel: Standard response model containing the result of the operation.
    """
    data = await execute_rp_rollup(
        db=db, 
    )
    
    return ResponseModel(
        data=data, 
        status_code=status.HTTP_200_OK, 
        success=True,
        message="RP Rollup executed successfully"
    )