#####################################################
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.06 #
#####################################################
import sys
from pathlib import Path

from .time_utils import time_for_file, time_string


class Logger:
    """A logger used in xautodl."""

    def __init__(self, root_dir, prefix="", log_time=True):
        """Create a summary writer logging to log_dir."""
        self.root_dir = Path(root_dir)
        self.log_dir = self.root_dir / "logs"
        self.log_dir.mkdir(parents=True, exist_ok=True)

        self._prefix = prefix
        self._log_time = log_time
        self.logger_path = self.log_dir / "{:}{:}.log".format(
            self._prefix, time_for_file()
        )
        self._logger_file = open(self.logger_path, "w")

    @property
    def logger(self):
        return self._logger_file

    def log(self, string, save=True, stdout=False):
        string = "{:} {:}".format(time_string(), string) if self._log_time else string
        if stdout:
            sys.stdout.write(string)
            sys.stdout.flush()
        else:
            print(string)
        if save:
            self._logger_file.write("{:}\n".format(string))
            self._logger_file.flush()

    def close(self):
        self._logger_file.close()
        if self.writer is not None:
            self.writer.close()

    def __repr__(self):
        return "{name}(dir={log_dir}, prefix={_prefix}, log_time={_log_time})".format(
            name=self.__class__.__name__, **self.__dict__
        )