#!/usr/bin/env python3

import sys
import vera
import csv
  
if len(sys.argv) != 3:
    sys.stderr.write("Usage:\n    vera-update-scenes <config> <room>\n")
    sys.exit(1)

schedule = []

reader = csv.reader(sys.stdin)
for row in reader:

    # Ignore empty lines
    if len(row) == 0: continue

    times = []
    for v in range(4, len(row), 2):
        times.append( (row[v], row[v+1] ) )

    schedule.append({
        "name": row[0],
        "device": row[1],
        "action": row[2],
        "value": row[3],
        "times": times
        })

ve = vera.connect(sys.argv[1])
room = sys.argv[2]
room = ve.get_room(room)

for i in ve.get_scenes():
    if i.room == None: continue
    if i.room.id == room.id:
        print("Deleting scene %s" % i.name)
        ve.delete_scene(i)

for s in schedule:

    device = ve.get_device(s["device"])

    if s["action"] == "set":
        action = vera.SetpointAction(device, s["value"])
    elif s["action"] == "switch":
        action = vera.SwitchAction(device, s["value"])
    elif s["action"] == "heat":
        action = vera.HeatingAction(device, s["value"])
    else:
        raise RuntimeError("Don't know about action '%s'" % s["action"])

    actions = vera.Group(0, [action])

    timers = []

    for i in s["times"]:

        d = i[0]
        t = i[1].split(":")
        
        hours = int(t[0])
        minutes = int(t[1])
        time = vera.Time(hours, minutes)
        timer = vera.DayOfWeekTimer(1, "time", d, time)
        timers.append(timer)

    # All modes except vacation
    m = vera.Modes(home=True, away=True, night=True)

    sd = vera.SceneDefinition(s["name"], [], m, timers, [actions], room)

    print("Adding scene %s..." % s["name"])

    ve.create_scene(sd)


