import datetime
import json
from dashboard_api import led_out
import websocket
#from websocket import create_connection
import colorsys
import signal
import time
from threading import Thread
#for downloading messages:



################################################################################
#VAR SETUP:
create_connection = websocket.create_connection
access_token = credentials.pushbullet_token
PB_ws_url = "wss://stream.pushbullet.com/websocket/"+access_token
notification_stream = create_connection(PB_ws_url)
notification_list = []


################################################################################
#start of actual programm.
class DashBoard(object):
    """docstring for DashBoard."""

    def __init__(self):


def display_time(four_digit_time):
    datetoshow = datetime.datetime.today().weekday()
    if datetoshow==4:
        if int(four_digit_time) >= 620 and int(four_digit_time) < 2130:
            brightness = 1
        else:
            brightness = 0
    elif datetoshow==5:
        if int(four_digit_time) >= 1030 and int(four_digit_time) < 2130:
            brightness = 1
        else:
            brightness = 0
    elif datetoshow==6:
        if int(four_digit_time) >= 1030 and int(four_digit_time) < 2115:
            brightness = 1
        else:
            brightness = 0
    else:
        if int(four_digit_time) >= 620 and int(four_digit_time) < 2115:
            brightness = 1
        else:
            brightness = 0
    print(four_digit_time, datetoshow, len(notification_list), brightness)
    output_led.output_time(four_digit_time, datetoshow, len(notification_list), brightness)


def error_file(error_digit):
    try:
        message_to_append = "Error "+error_digit+": "+errors.errors[error_digit]
        message_to_log=str(datetime.datetime.now().strftime("%d/%m/%y - %H:%M")) + "   " + message_to_append + "\n"
        with open("../global_files/fatal-errors.txt","a") as f:
            f.write(message_to_log)
        f.close()
        #file gets uploaded through cronjob
    except:
        display_time("9999")


def get_notifications():
    global notification_stream
    try:
        output =  notification_stream.recv()
        output = json.loads(output)
    except:
        notification_stream = create_connection(PB_ws_url)
        output =  notification_stream.recv()
        output = json.loads(output)

    if output["type"] == "push":
        if output["push"]["type"] == "mirror":
            notification_title = output["push"]["title"]
            notification_content = output["push"]["body"]
            notification_id = output["push"]["notification_id"]
            notification_type = "notification"
            notification_all_content = {"title":notification_title,"content":notification_content,"id":notification_id}
        elif output["push"]["type"] == "dismissal":
            notification_type = "dismissal"
            notification_all_content = output["push"]["notification_id"]
    elif output["type"] == "nop":
        notification_type = "status_test"
        notification_all_content = []
    else:
        with open("../global_files/logs.txt","a") as f:
            f.write(str(datetime.datetime.now().strftime("%d/%m/%y - %H:%M")) + "  unnown notification" + "\n")
        f.close()

    return notification_type,notification_all_content


def run_script():
    previous_time = False
    while True:
        strtimerightformat = str(datetime.datetime.now().time())[0:5]
        four_digit_time = strtimerightformat[0:2]+strtimerightformat[3:]
        if running_var.display_notif_running == False:
                display_time(four_digit_time)
        time.sleep(5)



################################################################################
#Programm flow
time_thread = Thread(target=run_script)
time_thread.start()
print("UP")

while True:
    notification_type,notification_content = get_notifications()
    if notification_type == "notification":
        for _ in range(len(notification_list)):
            if str(notification_content["id"]) in notification_list[_].values():
                del notification_list[_]
        notification_list.append(notification_content)

        notification_thread = Thread(target=output_led.output_notification, args=(notification_content,))
        if running_var.display_notif_running:
            error_file(8)
        else:
            running_var.display_notif_running = True
            notification_thread.start()

    elif notification_type == "dismissal":
        try:
            for _ in range(len(notification_list)):
                if notification_content in notification_list[_].values():
                    del notification_list[_]

        except:
            notification_list = []