from logging import LogRecord, Handler, ERROR
from logging.handlers import MemoryHandler
from typing import Optional


class EWSMemoryHandler(MemoryHandler):

    def __init__(self, capacity: int, flushLevel: int = ..., target: Optional[Handler] = ..., flushOnClose: bool = ...) -> None:
        super().__init__(capacity, flushLevel, target, flushOnClose)
        self.target = target

    def flush(self) -> None:
        self.acquire()
        try:
            if self.target:
                merged_messages = ""
                for record in self.buffer:
                    # self.target.handle(record)
                    # print(record.message)
                    merged_messages += record.message + "\n"

                if merged_messages is not "":
                    print(f"BEGIN:{merged_messages}:END")
                    merged_record = LogRecord("merged_record", ERROR, "pathname", 0, merged_messages, None, )
                    self.target.handle(merged_record)

            self.buffer = []
        finally:
            self.release()


    def shouldFlush(self, record: LogRecord) -> bool:
        return False