import time

from core import logger
from core.misc.event import EventLoop


def main():
    loop = EventLoop()

    def msg(arg):
        delta = time.time() - loop.start
        logger.debug("%s arg: %s", delta, arg)

    def repeat(interval, count):
        count -= 1
        msg("repeat: interval: %s; remaining: %s" % (interval, count))
        if count > 0:
            loop.add_event(interval, repeat, interval, count)

    def sleep(delay):
        msg("sleep %s" % delay)
        time.sleep(delay)
        msg("sleep done")

    def stop(arg):
        msg(arg)
        loop.stop()

    loop.add_event(0, msg, "start")
    loop.add_event(0, msg, "time zero")

    for delay in 5, 4, 10, -1, 0, 9, 3, 7, 3.14:
        loop.add_event(delay, msg, "time %s" % delay)

    loop.run()

    loop.add_event(0, repeat, 1, 5)
    loop.add_event(12, sleep, 10)

    loop.add_event(15.75, stop, "stop time: 15.75")


if __name__ == "__main__":
    main()
