"""Platform agnostic time implementation"""

from adafruit_blinka import agnostic

# We intentionally are patching into this namespace so skip the wildcard check.
# pylint: disable=unused-wildcard-import,wildcard-import

if agnostic.implementation == "circuitpython":
    from time import *
elif agnostic.implementation == "micropython":
    import utime
    from utime import sleep

    from ucollections import namedtuple
    _struct_time = namedtuple("struct_time", ("tm_year", "tm_mon", "tm_mday",
                                              "tm_hour", "tm_min", "tm_sec",
                                              "tm_wday", "tm_yday", "tm_isdst"))

    #pylint: disable=too-many-arguments
    def _marshal_time(tm_year, tm_mon, tm_mday, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=-1,
                      tm_yday=-1, tm_isdst=-1):
        """Construct struct_time with default values."""
        _struct_time(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_wday, tm_yday, tm_isdst)

    def struct_time(time_tuple):
        """Create a struct_time"""
        return _marshal_time(*time_tuple)

    #pylint: disable=invalid-name
    _total_ms = 0
    _prev_ticks_ms = utime.ticks_ms()
    def monotonic():
        """A monotonically increasing time in seconds. No defined start time."""
        # Assumes that monotonic is called more frequently than the wraparound of micropython's
        # utime.ticks_ms()
        global _prev_ticks_ms, _total_ms #pylint: disable=global-statement
        ticks_ms = utime.ticks_ms()
        _total_ms += utime.ticks_diff(ticks_ms, _prev_ticks_ms)
        _prev_ticks_ms = ticks_ms
        return _total_ms * 0.001
