#!/usr/bin/env python3
# kinds of goals:
# - overall
#     "i want to code at least {time} per {interval}"
# - in a project
# - in a language
# - in an editor

from datetime import timedelta, date, datetime, time
import sys
import json
import sqlite3
from config import timeout
import utils

conn = sqlite3.connect("data.db")

if len(sys.argv) < 2:
    print("provide a file", file=sys.stderr)
    sys.exit(1)

filename = sys.argv[1]
with open(filename) as f:
    data = json.load(f)

goal_type = data["type"]
if goal_type == "overall":
    # in seconds
    goal_min = int(data["goal_min"])

    # figure out what timestamps to pull from
    if data["interval"] == "day":
        # except!
        def convert_weekday(s):
            s = s.lower()
            return dict(
                sunday=0,
                monday=1,
                tuesday=2,
                wednesday=3,
                thursday=4,
                friday=5,
                saturday=6,
            ).get(s)
        excepts = list(map(convert_weekday, data["except"]))

        if len(sys.argv) > 2:
            # if a day is given, print that day
            d = datetime.strptime(sys.argv[2], "%Y-%m-%d").date()
            start_time = datetime.combine(d, time(hour=0, minute=0, second=0))
            end_time = datetime.combine(d, time(hour=23, minute=59, second=59))
        else:
            # find the current day!
            today = date.today()
            start_time = datetime.combine(today, time(hour=0, minute=0, second=0))
            end_time = datetime.now()

        coded_secs = utils.get_seconds_coded(conn, start_time, end_time, timeout)
        print("minutes coded:", (coded_secs/60))

    elif data["interval"] == "week":
        # start of the week
        today = date.today()
        last_monday = today - timedelta(days=today.weekday())
        print(last_monday)

# vim: set ft=python: