from asyncio import CancelledError

from codemp import PyLogger
from Codemp.src.utils import status_log


class CodempLogger:
    def __init__(self, debug: bool = False):
        self.handle = None
        self.started = False
        try:
            self.handle = PyLogger(debug)
        except Exception:
            pass

    async def log(self):
        if self.started:
            return

        self.started = True
        status_log("spinning up the logger...")
        try:
            while msg := await self.handle.listen():
                print(msg)
        except CancelledError:
            status_log("stopping logger")
            self.started = False
            raise
        except Exception as e:
            status_log(f"logger crashed unexpectedly:\n{e}")
            raise


DEBUG = False
logger = CodempLogger(DEBUG)