from fastapi import APIRouter, Depends, Request, status
from sqlalchemy.orm import Session
from schema.label_schema import LabelRequestSchema, LabelResponseList, LabelUpdateRequestSchema,LabelResponseSchema, TicketLabelRequestSchema,TicketLabelResponseSchema, ReleaseResponseList
from utils.get_db import get_db
from services.label_service import get_labels_from_db, create_label_in_db, update_label_in_db,delete_label_in_db,assign_label_to_ticket_in_db, assign_release_to_ticket_in_db, get_releases_from_db
from uuid import UUID

label_router = APIRouter()


@label_router.get("",status_code=status.HTTP_200_OK, response_model=LabelResponseList) 
def get_labels(request:Request,db: Session = Depends(get_db)):
    return get_labels_from_db(request,db)

@label_router.get("/releases", status_code=status.HTTP_200_OK, response_model=ReleaseResponseList)
def get_releases(request:Request, db: Session = Depends(get_db)):
    return get_releases_from_db(request, db)

@label_router.post("/create-new-label",status_code=status.HTTP_201_CREATED,response_model=LabelResponseSchema)
def create_label(request:Request, payload:LabelRequestSchema, db: Session = Depends(get_db)):
    return create_label_in_db(request,payload, db)

@label_router.put("/update-label/{id}",status_code=status.HTTP_200_OK, response_model=LabelResponseSchema)
def update_label(id:UUID,request:Request, payload:LabelUpdateRequestSchema, db: Session = Depends(get_db)):
    return update_label_in_db(id,request,payload, db)

@label_router.delete("/delete-label/{id}",status_code=status.HTTP_200_OK)
def delete_label(id:UUID,request:Request, db: Session = Depends(get_db)):
    return delete_label_in_db(id,request, db)

@label_router.post("/assign-label-to-ticket",status_code=status.HTTP_200_OK,response_model=TicketLabelResponseSchema)
def assign_label_to_ticket(request:Request, payload:TicketLabelRequestSchema, db: Session = Depends(get_db)):
    return assign_label_to_ticket_in_db(request,payload, db)

@label_router.post("/assign-release-to-ticket",status_code=status.HTTP_200_OK)
def assign_release_to_ticket(request:Request, payload:dict, db: Session = Depends(get_db)):
    return assign_release_to_ticket_in_db(request,payload, db)