"""
Console Driver - prints OCPP events to stdout
"""
import json
import logging
from datetime import datetime
from typing import Dict, Any, Optional

logger = logging.getLogger(__name__)


class ConsoleDriver:
    """Console-based OCPP driver - prints events to stdout"""
    
    def __init__(self):
        logger.info("Console driver initialized - printing events to stdout")
        
    async def log_event(self, event_type: str, data: Dict[str, Any], source: str) -> Optional[Dict[str, Any]]:
        """Print an OCPP event to stdout"""
        try:
            timestamp = datetime.utcnow().isoformat() + "Z"
            
            # Print formatted event to stdout
            print(f"🔌 OCPP Event: {event_type}")
            print(f"📅 Time: {timestamp}")
            print(f"📍 Source: {source}")
            print(f"📊 Data: {json.dumps(data, indent=2)}")
            print("-" * 50)
            
            logger.debug(f"[CONSOLE] Printed {event_type} event from {source} to stdout")
            return {"status": "logged", "output": "stdout", "event_type": event_type}
            
        except Exception as e:
            logger.error(f"[CONSOLE] Failed to print event: {e}")
            return {"status": "error", "error": str(e)}
    
    async def send_message(self, charge_point_id: str, message: Dict[str, Any]) -> Optional[Dict[str, Any]]:
        """Send/log a message - compatibility method"""
        action = message.get("action", "Unknown")
        data = message.get("data", message)
        return await self.log_event(action, data, charge_point_id)
