class {{ service_name.capitalize() }}_{{ entity_name.capitalize() }}Service:
    """
    Servicio de aplicación para manejar la lógica de negocio de {{ service_name.lower() }} en la entidad {{ entity_name.capitalize() }}.
    
    Este servicio actúa como un puente entre las entidades, repositorios y otras partes
    del sistema, encapsulando la lógica de negocio para garantizar cohesión.
    """

    #Si necesitas mantener un estado de lista de entidades
    {{ entity_name.capitalize() }}_list = []

    def __init__(self, repository):
        """
        Constructor del servicio.
        
        :param repository: Instancia del repositorio relacionado con la entidad {{ entity_name.capitalize() }}.
        """
        self.repository = repository

    def validate(self, **kwargs) -> None:
        """
        Valida los datos antes de ejecutar la lógica de negocio para la entidad {{ entity_name.capitalize() }}.
        
        Lógica de negocio y coordinación entre entidades/repositorios:
        - Validaciones específicas de la entidad {{ entity_name.capitalize() }}.
        - Reglas de negocio.
        - Dependencias externas.
        - Coordinación entre entidades.
        
        :param kwargs: Datos para validar.
            nota: puedes sustituir **kwargs por un DTO        
        :raise ValueError: Si los datos no son válidos.
        """
        # Implementa validaciones específicas relacionadas con {{ entity_name.capitalize() }}
        # Por ejemplo:
        # if kwargs.get("name") and len(kwargs.get("name")) < 10:
        #   raise ValueError("The name must have at least 10 characters")
        # TODO: Agrega las validaciones aquí.
        pass

    def execute(self, **kwargs) -> dict:
        """
        Método principal para ejecutar la lógica de negocio para {{ service_name.lower() }} en la entidad {{ entity_name.capitalize() }}.
        
        :param kwargs: Argumentos dinámicos para ejecutar la lógica.
            nota: puedes sustituir **kwargs por un DTO        
        :return: Un diccionario con los resultados de la operación.
        """

        #validaciones
        self.validate(**kwargs)

        # Implementa la lógica del servicio específico para la entidad {{ entity_name.capitalize() }}
        # Por ejemplo:
        # result = self.repository.get_by_id(kwargs.get("id"))
        # TODO: Agrega la lógica de negocio aquí.
        raise NotImplementedError("Debes implementar la lógica de negocio para {{ service_name.lower() }} en {{ entity_name.capitalize() }}.")        

