#!/usr/bin/env python
'''Test script to get data from solaredge'''
import sys
import os
import argparse
import requests
import json
import logging

from datetime import date
from datetime import datetime, timedelta

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

import solaredge

from src.db import config


def cliParser(argv=None):
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('-v', '--verbose', dest='verbose', action='store_const', default=False, const=True, help='Enable verbose mode')
    args = parser.parse_args(argv)
    return args


def main(args):
    try:
        data = {}
        site_id = config['SOLAREDGE_SITEID']
        se = solaredge.Solaredge(config['SOLAREDGE_APIKEY'])
        se_data = se.get_overview(site_id)
        if 'overview' in se_data:
            data['power'] = se_data['overview']['currentPower']['power']
            data['energy'] = se_data['overview']['lastDayData']['energy']
            data['month'] = se_data['overview']['lastMonthData']['energy']
            logging.info('Solaredge: Current {} W, Today {} Wh, Month {:.1f} KWh'.format(data['power'] , data['energy'], float(data['month']) / 1000))
            logging.info(json.dumps(se_data))

        # Other API calls
        today = datetime.now()
        yesterday = datetime.now() - timedelta(1)
        before = datetime.now() - timedelta(3/24)
        end_date = today.strftime("%Y-%m-%d %H:%M:%S")
        start_date = yesterday.strftime("%Y-%m-%d %H:%M:%S")
        end_time = today.strftime("%H:%M:%S")
        start_time = before.strftime("%H:%M:%S")

        se_data = se.get_inventory(site_id)
        logging.info('\nInventory:\n' + json.dumps(se_data))
        se_data = se.get_list()
        logging.info('\nList:\n' + json.dumps(se_data))
        se_data = se.get_details(site_id)
        logging.info('\nDetails:\n' + json.dumps(se_data))
        se_data = se.get_data_period(site_id)
        logging.info('\nPeriod:\n' + json.dumps(se_data))
        # # problem
        # se_data = se.get_energy(site_id, start_date, end_date)
        # logging.info('\nEnergy:\n' + json.dumps(se_data))
        # se_data = se.get_time_frame_energy(site_id, start_date, end_date)
        # logging.info('\nFrame-Energy:\n' + json.dumps(se_data))
        # se_data = se.get_power(site_id, start_time, end_time)
        # logging.info('\nPower:\n' + json.dumps(se_data))
        # se_data = se.get_power_details(site_id, start_time, end_time)
        # logging.info('\nPower-Details:\n' + json.dumps(se_data))
        # se_data = se.get_energy_details(site_id, start_time, end_time)
        # logging.info('\nEnergy-Details:\n' + json.dumps(se_data))
        # se_data = se.get_current_power_flow(site_id)
        # logging.info('\nCurrent-Power:\n' + json.dumps(se_data))
        # se_data = se.get_storage_data(site_id, start_time, end_time)
        # logging.info('\nStorage-Data:\n' + json.dumps(se_data))

        # se.get_energy_details_dataframe(site_id, start_time, end_time)

    except KeyboardInterrupt: # pragma: no cover
        return -1
    except Exception as e: # pragma: no cover
        import traceback
        logging.error('Exception: {}\n'.format(e))
        traceback.print_exc(file=sys.stdout)
        return -1
    finally:
        pass
    return 0


############################################################
if __name__ == '__main__': # pragma: no cover
    '''Program entry loading args and start main function'''
    args = cliParser()
    if args.verbose:
        logging.basicConfig(format='%(levelname)-8s: %(message)s', level=logging.DEBUG, stream=sys.stdout)
    else:
        logging.basicConfig(format='%(levelname)-8s: %(message)s', level=logging.INFO, stream=sys.stdout)

    if args.verbose:
        logging.debug("Run " + os.path.basename(__file__) + " with following args:")
        logging.debug(args)
    else:
        logging.info("Run " + os.path.basename(__file__))
    ret = main(args)
    if ret:
        logging.error('Finished {:s} with error {:d}.'.format(os.path.basename(__file__), ret))
    else:
        logging.info('Finished {:s} successfully.'.format(os.path.basename(__file__)))
    sys.exit(abs(ret))
