import arrow
import calendar


class DateTimeLocal:

    __SYSTEM__: str = "GMT+0"

    def __init__(self, timezone: str = "GMT+3", is_client: bool = True):
        self.timezone = self.__SYSTEM__
        if is_client:
            self.timezone = timezone.replace("-", "+")

    def find_last_day_of_month(self, date_value):
        today = self.get(date_value).date()
        _, last_day = calendar.monthrange(today.year, today.month)
        return self.get(today.year, today.month, last_day)

    def find_first_day_of_month(self, date_value):
        today = self.get(date_value).date()
        return self.get(today.year, today.month, 1).to(self.timezone)

    def get(self, *args):
        return arrow.get(*args).to(str(self.timezone))

    def now(self):
        return arrow.now().to(str(self.timezone))

    def shift(self, date, **kwargs):
        return self.get(date).shift(**kwargs)

    def date(self, date):
        return self.get(date).date()

    def time(self, date):
        return self.get(date).time()

    def string_date(self, date, splitter: str = "-"):
        return str(self.get(date).date()).replace("-", splitter)

    def string_time_only(self, date):
        return self.get(date).format("HH:mm:ss")

    def string_date_only(self, date):
        return self.get(date).format("YYYY-MM-DD")


client_arrow = DateTimeLocal(is_client=True)
system_arrow = DateTimeLocal(is_client=False)
