from django.db import transaction
# from apps.companies.models import Holiday
from apps.companies.utils import log_company_change


class HolidayService:

    @staticmethod
    @transaction.atomic
    def create(*, company, user, serializer):
        holiday = serializer.save(company=company)

        log_company_change(
            company=company,
            user=user,
            action='created',
            model_name='Holiday',
            object_id=holiday.id,
            details=f"Created holiday '{holiday.name}' "
                    f"from {holiday.start_date} to {holiday.end_date}"
        )
        return holiday

    @staticmethod
    @transaction.atomic
    def update(*, company, user, instance, serializer):
        old = instance

        holiday = serializer.save()

        log_company_change(
            company=company,
            user=user,
            action='updated',
            model_name='Holiday',
            object_id=holiday.id,
            details=(
                f"Updated holiday from '{old.name}' "
                f"({old.start_date} → {old.end_date}) "
                f"to '{holiday.name}' "
                f"({holiday.start_date} → {holiday.end_date})"
            )
        )
        return holiday

    @staticmethod
    @transaction.atomic
    def delete(*, company, user, instance):
        log_company_change(
            company=company,
            user=user,
            action='deleted',
            model_name='Holiday',
            object_id=instance.id,
            details=f"Deleted holiday '{instance.name}'"
        )
        instance.delete()
