#!/usr/bin/env python3
# vim: set filetype=python:
"""
Pomodoro timer

- Writes pomodoro timer to temporary file so statusbar can read it
- Notification on session finish
- Notification on break finish
"""

import atexit
import os
from argparse import ArgumentParser
from time import sleep

from plyer import notification

POMO_PATH = os.path.join(
    os.getenv("XDG_DATA_HOME", os.path.expanduser("~/.local/share")), "pomo"
)


@atexit.register
def clear():
    if os.path.exists(POMO_PATH):
        os.remove(POMO_PATH)


def format_mins_secs(mins, secs):
    return f"{mins:02d}:{secs:02d}"


def make_countdown():
    def countdown(duration):
        while duration != 0:
            mins = duration // 60
            secs = duration % 60
            time_str = format_mins_secs(mins, secs)
            os.system(f'echo -n "{time_str}" > {POMO_PATH}')
            sleep(1)
            duration -= 1

    return countdown


def main(args):
    work_duration = args.work_duration * 60
    break_duration = args.break_duration * 60
    repeats = args.repeats

    work_countdown = make_countdown()
    break_countdown = make_countdown()

    while repeats != 0:
        notification.notify(title="Get started")
        work_countdown(work_duration)
        if break_duration != 0:
            notification.notify(title="Time for a break")
            break_countdown(break_duration)
            notification.notify(title="Break is over, back to work")
        repeats -= 1


def handle_signal(signal, frame):
    # Wait for clear to finish
    clear()
    print("Exiting")
    exit(0)


if __name__ == "__main__":

    parser = ArgumentParser()
    parser.add_argument(
        "-w", "--work-duration", type=int, help="Session duration", default=25
    )
    parser.add_argument(
        "-b", "--break-duration", type=int, help="Break duration", default=5
    )
    parser.add_argument(
        "-r", "--repeats", type=int, help="Numer of sessions", default=1
    )
    parser.add_argument("-c", "--clear", action="store_true", help="Clear timer")

    args = parser.parse_args()

    main(args)
