from time import time
from datetime import datetime


class Profiler:
    OUTPUT: str = "/tmp/scodoc.profiler.csv"

    def __init__(self, tag: str) -> None:
        self.tag: str = tag
        self.start_time: time = None
        self.stop_time: time = None

    def start(self):
        self.start_time = time()
        return self

    def stop(self):
        self.stop_time = time()
        return self

    def elapsed(self) -> float:
        return self.stop_time - self.start_time

    def dates(self) -> tuple[datetime, datetime]:
        return datetime.fromtimestamp(self.start_time), datetime.fromtimestamp(
            self.stop_time
        )

    def write(self):
        with open(Profiler.OUTPUT, "a") as file:
            dates: tuple = self.dates()
            date_str = (dates[0].isoformat(), dates[1].isoformat())
            file.write(f"\n{self.tag},{self.elapsed() : .2}")

    @classmethod
    def write_in(cls, msg: str):
        with open(cls.OUTPUT, "a") as file:
            file.write(f"\n# {msg}")

    @classmethod
    def clear(cls):
        with open(cls.OUTPUT, "w") as file:
            file.write("")