from abc import ABC, abstractmethod

class BaseDBHandler(ABC):
    """Abstract base class for database handlers with common utilities."""

    def __init__(self, api_logger):
        self.api_logger = api_logger
        self.connection = None
        self.pool = None

    @abstractmethod
    def connect(self, service, user, password, database=None):
        """
        Connect to the database
        Returns: dict with code, msg
        """
        pass

    @abstractmethod
    def execute_query(self, query, database=None):
        """
        Execute a query
        Returns: dict with code, msg, columns_names, results
        """
        pass

    def make_success_response(self, msg="Query executed successfully", columns_names=None, results=None):
        """Helper method to create success response"""
        return {
            "code": 200,
            "msg": msg,
            "columns_names": columns_names or [],
            "results": results or []
        }

    def make_connection_response(self, msg):
        """Helper method to create connection response (code and msg only)"""
        return {
            "code": 200,
            "msg": msg
        }

    def make_error_response(self, code, msg):
        """Helper method to create error response"""
        return {
            "code": code,
            "msg": msg
        }