#!/usr/bin/env python3

from glowmarkt import *
import datetime
import sys
import argparse

try:

    parser = argparse.ArgumentParser(
        description=__doc__
    )
    parser.add_argument('--username', '-u',
                        required=True,
                        help="Bright account username")
    parser.add_argument('--password', '-p',
                        required=True,
                        help="Bright account password")
    parser.add_argument('--minutes', '-m',
                        default=240,
                        help="Number of minutes to look back")
    parser.add_argument('--period', '-d',
                        default="PT30M",
                        help="Summary period (default: PT1H)")


    # Parse arguments
    args = parser.parse_args(sys.argv[1:])

    cli = BrightClient(args.username, args.password)
    ents = cli.get_virtual_entities()

    for ent in ents:
        print("Entity:", ent.name)
        for res in ent.get_resources():
            print("  %s:" % res.name)

            now = datetime.datetime.now().astimezone()
            t_to = res.round(now, args.period)
            t_from = t_to - datetime.timedelta(minutes=int(args.minutes))

            rdgs = res.get_readings(t_from, t_to, args.period)
            for r in rdgs:
                print("    %s: %s" % (
                    r[0].astimezone().replace(tzinfo=None),
                    r[1]
                ))

            try:
                 cur = res.get_current()
                 print("    current (%s): %s" % (
                     cur[0].astimezone().replace(tzinfo=None),
                     cur[1]
                 ))
            except Exception as e:
                print("    current: %s" % str(e))

            try:
                 cur = res.get_meter_reading()
                 print("    meter (%s): %s" % (
                     cur[0].astimezone().replace(tzinfo=None),
                     cur[1]
                 ))
            except Exception as e:
                print("    meter reading: %s" % str(e))
                
            t = res.get_tariff()
            print("    Tariff: rate=%s standing=%s" % (
                t.current_rates.rate,
                t.current_rates.standing_charge,
            ))

except Exception as e:
    print(e)

    raise e

