from __future__ import annotations
from datetime import datetime
from typing import Any, TYPE_CHECKING
if TYPE_CHECKING:
    import logging
[docs]
class DatabaseOutputHandler:
    """Collects import messages for database storage in ImportLog.
    Facilitates dataflow by capturing detailed logging separately.
    """
    def __init__(self) -> None:
[docs]
        self.messages: list[dict[str, Any]] = [] 
[docs]
    def info(self, message: str) -> None:
        self._add_message('info', message) 
[docs]
    def success(self, message: str) -> None:
        self._add_message('success', message) 
[docs]
    def error(self, message: str) -> None:
        self._add_message('error', message) 
[docs]
    def _add_message(self, level: str, message: str) -> None:
        """Add a message with timestamp and level to the collection."""
        self.messages.append({
            'timestamp': datetime.utcnow().isoformat(),
            'level': level,
            'message': message
        }) 
[docs]
    def get_messages(self) -> list[dict[str, Any]]:
        """Return all collected messages."""
        return self.messages.copy() 
[docs]
    def clear_messages(self) -> None:
        """Clear all collected messages."""
        self.messages.clear() 
 
[docs]
class LogOutputHandler:
    """Logs import messages using Python logging."""
    def __init__(self, logger: logging.Logger) -> None:
[docs]
    def info(self, message: str) -> None:
        self.logger.info(message) 
[docs]
    def success(self, message: str) -> None:
        self.logger.info(f'SUCCESS: {message}') 
[docs]
    def error(self, message: str) -> None:
        self.logger.error(message)