""" Simple formatting of datetime.datetime objects """

import datetime


class DateTimeFormatter:
    """ provides property access to formatted datetime.datetime strftime values """

    def __init__(self, dt: datetime.datetime):
        self.dt = dt

    @property
    def date(self):
        """ ISO date in form 2020-03-22 """
        return self.dt.date().isoformat()

    @property
    def year(self):
        """ 4 digit year """
        return f"{self.dt.year}"

    @property
    def yy(self):
        """ 2 digit year """
        return f"{self.dt.strftime('%y')}"

    @property
    def mm(self):
        """ 2 digit month """
        return f"{self.dt.strftime('%m')}"

    @property
    def month(self):
        """ Month as locale's full name """
        return f"{self.dt.strftime('%B')}"

    @property
    def mon(self):
        """ Month as locale's abbreviated name """
        return f"{self.dt.strftime('%b')}"

    @property
    def dd(self):
        """ 2-digit day of the month """
        return f"{self.dt.strftime('%d')}"

    @property
    def dow(self):
        """ Day of week as locale's name """
        return f"{self.dt.strftime('%A')}"

    @property
    def doy(self):
        """ Julian day of year starting from 001 """
        return f"{self.dt.strftime('%j')}"

    @property
    def hour(self):
        """ 2-digit hour """
        return f"{self.dt.strftime('%H')}"

    @property
    def min(self):
        """ 2-digit minute """
        return f"{self.dt.strftime('%M')}"

    @property
    def sec(self):
        """ 2-digit second """
        return f"{self.dt.strftime('%S')}"
