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.wine.keyword_spread.services.keyword_spread import get_all_keyword_spreads,get_grouped_keyword_spreads
from src.apps.wine.keyword_spread.schemas.keyword_spread import KeywordSpreadFilterSchema

router = APIRouter(prefix="", tags=["Keyword Spreads"])

@router.get("", response_model=ResponseModel, summary="Get all Keyword Spreads")
async def list_keyword_spreads(
    db: Session = Depends(get_db),
    payload: KeywordSpreadFilterSchema = Depends(),
    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",
    ),
):
    data = await get_all_keyword_spreads(db=db,payload=payload, page=page, per_page=per_page)
    return ResponseModel(
        data=data,
        status_code=status.HTTP_200_OK,
        success=True,
        message="Keyword Spreads fetched successfully"
    )
    
@router.get("/tree", response_model=ResponseModel, summary="Get grouped Keyword Spreads")
async def list_grouped_keyword_spreads(
    db: Session = Depends(get_db),
    payload: KeywordSpreadFilterSchema = Depends(),
):
    """Endpoint to list grouped keyword spreads."""
    data = await get_grouped_keyword_spreads(db=db,payload=payload)
    return ResponseModel(
        data=data,
        status_code=status.HTTP_200_OK,
        success=True,
        message="Grouped Keyword Spreads fetched successfully"
    )