from datetime import datetime
from uuid import UUID
from sqlalchemy.orm import Session
from fastapi import HTTPException, status
from src.core.exceptions import APIException
from src.utils.pagination import QueryPaginator
from src.apps.wine.producer.models.producer import Producer,ProducerKeyword,ProducerNoise
from sqlalchemy import func, cast, Integer,and_,or_
from src.apps.wine.producer.schemas.producer import ProducerFilterSchema,ProducerCreateSchema,ProducerUpdateSchema,ProducerOutputSchema
from src.utils.constants import API_PREFIXES
from src.apps.wine.producer.schemas.producer_noise import *


async def create_producer_noise(
    db: Session,
    producer_noise: ProducerNoiseAdditionSchema
) -> ProducerNoise:
    try:
        new_noise = ProducerNoise(**producer_noise.model_dump())
        db.add(new_noise)
        db.commit()
        db.refresh(new_noise)
        return ProducerNoiseOutputSchema.model_validate(new_noise)
    except Exception as e:
        raise APIException(
            module="create_producer_noise",
            error={"exception": str(e)},
            status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
            message="Error creating producer noise."
        )