"""
Service layer for PedimentoDates CRUD operations
"""

import logging
from typing import Optional

from sqlalchemy.orm import Session

from ..dtos.pedimento_dates import PedimentoDatesCreate, PedimentoDatesUpdate
from ..models.pedimento_dates import PedimentoDates

logger = logging.getLogger(__name__)


class PedimentoDatesService:
    """Service class for PedimentoDates business logic"""

    @staticmethod
    def get_by_pedimento_id(
        db: Session, pedimento_id: int, tenant_id: int, company_id: int = None
    ) -> Optional[PedimentoDates]:
        """Get dates by pedimento ID"""
        return (
            db.query(PedimentoDates)
            .filter(
                PedimentoDates.pedimento_id == pedimento_id,
                PedimentoDates.tenant_id == tenant_id,
            )
            .first()
        )

    @staticmethod
    def create(db: Session, data: PedimentoDatesCreate) -> PedimentoDates:
        """Create new pedimento dates"""
        dates = PedimentoDates(**data.model_dump())
        db.add(dates)
        db.commit()
        db.refresh(dates)
        return dates

    @staticmethod
    def update(
        db: Session, pedimento_id: int, tenant_id: int, data: PedimentoDatesUpdate
    ) -> Optional[PedimentoDates]:
        """Update pedimento dates"""
        dates = PedimentoDatesService.get_by_pedimento_id(db, pedimento_id, tenant_id)
        if not dates:
            return None

        update_data = data.model_dump(exclude_unset=True)
        for field, value in update_data.items():
            setattr(dates, field, value)

        db.commit()
        db.refresh(dates)
        return dates

    @staticmethod
    def delete(db: Session, pedimento_id: int, tenant_id: int) -> bool:
        """Delete pedimento dates"""
        dates = PedimentoDatesService.get_by_pedimento_id(db, pedimento_id, tenant_id)
        if not dates:
            return False

        db.delete(dates)
        db.commit()
        return True
