"""
Base service class for CBCFacil services
"""
import logging
from abc import ABC, abstractmethod
from typing import Optional


class BaseService(ABC):
    """Base class for all services"""

    def __init__(self, name: str):
        self.name = name
        self.logger = logging.getLogger(f"{__name__}.{name}")

    @abstractmethod
    def initialize(self) -> None:
        """Initialize the service"""
        pass

    @abstractmethod
    def cleanup(self) -> None:
        """Cleanup service resources"""
        pass

    def health_check(self) -> bool:
        """Perform health check"""
        return True

    def __enter__(self):
        self.initialize()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cleanup()
