from tkinter import *
from tkinter import ttk
from tkinter import StringVar
from PIL import ImageTk, Image            #, PhotoImage
#import urllib.request
#import urllib.parse
#import requests
#import json
#import datetime
#from time import strftime
#import sys
from math import trunc
from datetime import datetime
import Wrpt
from Wrpt import hourdata_3, hourdata_6, daydata_1, daydata_2  #, Weather_alerts

def Set_am_pm(timestr):
    hr = int(timestr[:2])
            
    if hr <= 11:
        return str(hr) + 'AM'
    else:
        return str(hr-12) +'PM'  #adjust for 24 hr clock
    
def Get_Day_Week(datestr):
    dt = datetime.strptime(datestr, "%Y-%m-%d")
    D_O_W = (dt.strftime('%A'))[:3]  # return 1s 3 leter of day
    return D_O_W


#data = Wrpt.Get_data_file()
HR_keys = ['date', 'time', 'win_dir', 'w_id', 'pop',
           'w_main', 'w_description', 'w_icon']
DAY_keys = ['date', 'time', 'win_dir', 'w_id', 
            'w_main', 'w_description', 'w_icon', 'pop'
            'feels_like_day', 'feels_like_night', 
            'feels_like_eve', 'feels_like_morn', 
            'temp_day', 'temp_min', 'temp_max', 
            'temp_night', 'temp_eve', 'temp_morn']
Current_keys = ['date', 'time', 'sunrise', 'sunset', 
                'temp', 'humidity', 'feels_like', 'pressure', 
                'clouds', 'visibility', 'wind_speed', 'win_dir', 
                'w_id', 'w_main', 'w_description', 'w_icon', 
                'temp_day', 'temp_min', 'temp_max', 'temp_night', 
                'temp_eve', 'temp_morn']
Alert_keys = ['sender_name', 'eventAlert', 'startDate',
                 'endDate', 'description', 'tags']
root = Tk()
root.geometry("700x800+100+100")         # width x height + X + Y screen offset
root.title("Marty's Weather Report")


# Create and position the main frame
mainframe = ttk.Frame(root, padding="3 3 12 12")       
mainframe.grid(row=0, column=0, sticky="nsew")
mainframe.columnconfigure(0, weight=1)
# mainframe.columnconfigure(1, weight=1)
# mainframe.columnconfigure(2, weight=1)
# mainframe.columnconfigure(3, weight=1)
# mainframe.rowconfigure(0, weight=1)

#fill mainframe position 1,0 Temperature range
#Today_Data = Wrpt.CurrentDay()

CDate = Wrpt.CurrentDay()['date']
CTime = Wrpt.CurrentDay()['time']
CSunrise = Wrpt.CurrentDay()['sunrise']
CSunset = Wrpt.CurrentDay()['sunset']
CTemp_ = Wrpt.CurrentDay()['temp']
CFeels = Wrpt.CurrentDay()['feels_like']
CPressure = Wrpt.CurrentDay()['pressure']
CClouds = Wrpt.CurrentDay()['clouds']
CWindSpeed = str(int(Wrpt.CurrentDay()['wind_speed']))
CWindDir = Wrpt.CurrentDay()['win_dir']
CWthr_main = Wrpt.CurrentDay()['w_main']
CWthr_description = Wrpt.CurrentDay()['w_description']
Cwthr_icon = Wrpt.CurrentDay()['w_icon']
CMax_temp = Wrpt.CurrentDay()['temp_max']
CMin_temp = Wrpt.CurrentDay()['temp_min']

H3Time = hourdata_3['time']
print('h3time: ', H3Time)
H3Time = Set_am_pm(H3Time) 
H3Temp = hourdata_3['temp']
H3Temp = str(trunc(H3Temp)) +'\U000000B0'
H3WndSpeed =hourdata_3['wind_speed']
H3WndSpeed = round(H3WndSpeed)
H3WndDeg= hourdata_3['win_dir'] + '\n' + str(H3WndSpeed) + ' mph'
H3Wthr_Description = hourdata_3['w_description']
H3Wthr_icon = "./Icons/" + hourdata_3['w_icon']
H3Pop = str(int(hourdata_3['pop']* 100))+'%'

H6Time = hourdata_6['time']
print('h6time: ', H6Time)
H6Time = Set_am_pm(H6Time) 
H6Temp = hourdata_6['temp']
H6Temp = str(trunc(H6Temp)) +'\U000000B0'
H6WndSpeed =hourdata_6['wind_speed']
H6WndSpeed = int(H6WndSpeed)
H6WndDeg= hourdata_6['win_dir'] + '\n' + str(H6WndSpeed) + ' mph'
H6Wthr_Description = hourdata_6['w_description']
H6Wthr_icon = "./Icons/" + hourdata_6['w_icon']
H6Pop = str(int(hourdata_6['pop']* 100))+'%'

D1Date = daydata_1['date']
D1Date = Get_Day_Week(D1Date)
D1Summary = daydata_1['summary']
D1Temp_Day = daydata_1['temp_day']
D1Temp_Day = str(trunc(D1Temp_Day)) +'\U000000B0'
D1Wnd_speed = str(int(daydata_1['wind_speed']))
D1Wnd_deg = daydata_1['win_dir'] + '\n' + D1Wnd_speed + ' mph'
D1Wthr_Summary = daydata_1['summary']
D1Whtr_icon = './Icons/' + daydata_1['w_icon']
D1Pop = str(int(daydata_1['pop']* 100))+'%'

D2Date = daydata_2['date']
D2Date = Get_Day_Week(D2Date)
D2Summary = daydata_2['summary']
D2Temp_Day = daydata_2['temp_day']
D2Temp_Day = str(trunc(D2Temp_Day)) +'\U000000B0'
D2Wnd_speed = str(int(daydata_2['wind_speed']))
D2Wnd_deg = daydata_2['win_dir'] + '\n' + D2Wnd_speed + ' mph'
D2Wthr_Summary = daydata_2['summary']
D2Whtr_icon = './Icons/' + daydata_2['w_icon']
D2Pop = str(int(daydata_2['pop']* 100))+'%'


C_icon_file = './Icons/' +  Cwthr_icon
C_hi_lo = StringVar()
C_hi_lo.set(' L:' + str(int(CMin_temp)) + '\n ' + 'H:' + str(int(CMax_temp)))
iconImage = PhotoImage(file=C_icon_file)  
#print('Current Weather Icon: C:0 R:1',iconImage.width())           

ttk.Label(mainframe, font =('Arial', 16, 'bold') , image=iconImage, compound = 'left', 
textvariable = C_hi_lo, background= 'lightblue').grid(column= 0, row= 1, sticky= 'W')

                                 
CTemp = StringVar()        
CTemp.set(str(trunc(CTemp_))+'\U000000B0')
ttk.Label(mainframe, textvariable = CTemp, font=('Ariel', 60),
                 background = 'lightgreen' ).grid(column= 2, row = 1, sticky= 'W')

#fill mainframe position 1,1 Windspeed & direction
Windspeed = StringVar()
WindspeedStr = ('Wind\n' + CWindDir + '\n' + CWindSpeed + ' mph')
Windspeed.set(WindspeedStr)
ttk.Label(mainframe, textvariable = Windspeed, background = 'pink', font = ('Ariel', 20)
          ).grid(column= 3, row= 1, pady= 5,padx= 0, sticky= 'W')

Today_outlook = StringVar()
Today_outlook.set(Wrpt.CurrentDay()['w_description'])
#fill mainframe position 2,0 Todays forcast, expand over 2 columns
ttk.Label(mainframe, textvariable=Today_outlook, font = ('Ariel', 20) 
          ).grid(column= 1, row= 2, columnspan=3,padx= 0, pady=0,sticky= 'W')
today = StringVar()
today_str = ('Time of sample ',Wrpt.CurrentDay()['date'], Wrpt.CurrentDay()['time'])
today.set(today_str)
ttk.Label(mainframe, textvariable = today, font = ('Ariel', 16)
          ).grid(column= 0, row= 0, columnspan=3,padx= 0, pady= 10, sticky= 'EW')

ttk.Separator(mainframe, orient= 'horizontal').grid(row = 3, column=0, pady=5,columnspan=4 , sticky='EW' )

################################"No Alert Data"##############################################
# start hour display

# row 4 info icons
Rain_icon_file = './Icons/' + 'umbrella64.png'
R_iconImage = PhotoImage(file=Rain_icon_file )
ttk.Label(mainframe, image=R_iconImage,   
          background= 'lightblue').grid(column= 2, row= 4, padx= 0, sticky= 'W')

wind_icon_file = './Icons/' + 'wind_icon64.png'
W_iconImage = PhotoImage(file=wind_icon_file )
ttk.Label(mainframe, image=W_iconImage,   
          background= 'lightgreen').grid(column= 3, row= 4, padx= 0, sticky= 'W')

# Row 5 >> hour 3

H3_icon_file = H3Wthr_icon
Hr3_iconImage = PhotoImage(file=H3Wthr_icon )
H3Time_str = StringVar()
H3Time_str.set(H3Time)
ttk.Label(mainframe, image=Hr3_iconImage,   compound = 'left', 
          textvariable=H3Time_str, font=('Ariel', 20) ).grid(column= 0, row= 5, pady= 5, sticky= 'W')

H3Tmp_str = StringVar()
H3Tmp_str.set(H3Temp)
ttk.Label(mainframe, textvariable = H3Tmp_str, font = ('Arial', 30)
          ).grid(column= 1, row= 5, padx=0, pady= 5, sticky= 'W')

H3pop_str = StringVar()
H3pop_str.set(H3Pop)
ttk.Label(mainframe, textvariable= H3pop_str, font = ('Arial', 15)
          ).grid(column= 2, row= 5, padx= 0, pady= 5, sticky= 'W')

H3wndDir_str = StringVar()
H3wndDir_str.set(H3WndDeg)
ttk.Label(mainframe, textvariable= H3wndDir_str, font = ('Arial', 15)
          ).grid(column= 3, row= 5, padx= 0, pady= 5, sticky= 'W')

# Row 6, Hour  6
Hr6_iconImage = PhotoImage(file=H6Wthr_icon )
H6Time_str = StringVar()
H6Time_str.set(H6Time)
ttk.Label(mainframe, image=Hr6_iconImage,  width=5 , compound = 'left', 
          textvariable=H6Time_str, font=('Ariel', 20) ).grid(column= 0, row= 6, pady=0, sticky= 'W')

H6Tmp_str = StringVar()
H6Tmp_str.set(H6Temp)
ttk.Label(mainframe, textvariable = H6Tmp_str, font = ('Arial', 30)
          ).grid(column= 1, row= 6, padx=0, pady= 0, sticky= 'W')

H6pop_str = StringVar()
H6pop_str.set(H6Pop)
ttk.Label(mainframe, textvariable= H6pop_str, font = ('Arial', 15)
          ).grid(column= 2, row= 6, padx= 0, pady= 0, sticky= 'W')

H6wndDir_str = StringVar()
H6wndDir_str.set(H6WndDeg)
ttk.Label(mainframe, textvariable= H6wndDir_str, font = ('Arial', 15)
          ).grid(column= 3, row= 6, padx= 0, pady= 0, sticky= 'W')

# Row 7 Day 1  -- 1 day after current day

D1_iconImage = PhotoImage(file=D1Whtr_icon )
D1date_str = StringVar()
D1date_str.set(D1Date)
ttk.Label(mainframe, image=D1_iconImage,  width=5 , compound = 'left', 
          textvariable=D1date_str, font=('Ariel', 20) ).grid(column= 0, row= 7, pady=0, sticky= 'W')

D1Tmp_str = StringVar()
D1Tmp_str.set(D1Temp_Day)
ttk.Label(mainframe, textvariable = D1Tmp_str, font = ('Arial', 30)
          ).grid(column= 1, row= 7, padx=0, pady= 0, sticky= 'W')

D1pop_str = StringVar()
D1pop_str.set(D1Pop)
ttk.Label(mainframe, textvariable= D1pop_str, font = ('Arial', 15)
          ).grid(column= 2, row= 7, padx= 0, pady= 0, sticky= 'W')

D1wndDir_str = StringVar()
D1wndDir_str.set(D1Wnd_deg)
ttk.Label(mainframe, textvariable= D1wndDir_str, font = ('Arial', 15)
          ).grid(column= 3, row= 7, padx= 0, pady= 0, sticky= 'W')

# Row 8  Day 2  -- 2 days after current day

D2_iconImage = PhotoImage(file=D2Whtr_icon )
D2date_str = StringVar()
D2date_str.set(D2Date)
ttk.Label(mainframe, image=D2_iconImage,  width=5 , compound = 'left', 
          textvariable=D2date_str, font=('Ariel', 20) ).grid(column= 0, row= 8, pady=0, sticky= 'W')

D2Tmp_str = StringVar()
D2Tmp_str.set(D1Temp_Day)
ttk.Label(mainframe, textvariable = D2Tmp_str, font = ('Arial', 30)
          ).grid(column= 1, row= 8, padx=0, pady= 0, sticky= 'W')

D2pop_str = StringVar()
D2pop_str.set(D2Pop)
ttk.Label(mainframe, textvariable= D2pop_str, font = ('Arial', 15)
          ).grid(column= 2, row= 8, padx= 0, pady= 0, sticky= 'W')

D2wndDir_str = StringVar()
D2wndDir_str.set(D2Wnd_deg)
ttk.Label(mainframe, textvariable= D2wndDir_str, font = ('Arial', 15)
          ).grid(column= 3, row= 8, padx= 0, pady= 0, sticky= 'W')

ttk.Separator(mainframe, orient= 'horizontal').grid(row = 9, column=0, pady=5,columnspan=4 , sticky='EW' )

# EMERGENCY ALERT DATA The last and optional field in data

ttk.Label(mainframe, text= "National Weather Alert", 
               font = ('Arial', 20, 'bold'), foreground = 'blue'
          ).grid(column= 0, row= 10, padx=145, pady= 0, sticky= 'W', columnspan = 3)
Alert_data = Wrpt.Weather_alerts()
if Alert_data['sender_name'] ==  "No Alert Data":
    pass
else:
    Alert_name = Alert_data['sender_name']
    Alertname_str = StringVar()
    Alertname_str.set("From: " + str(Alert_name))
    ttk.Label(mainframe, textvariable= Alertname_str, font = ('Arial', 15), wraplength= 450
          ).grid(column= 0, row= 11, columnspan= 4, pady= 0, sticky= 'W')

    Alert_event = Alert_data['eventAlert']
    Alertevent_str = StringVar()
    Alertevent_str.set(Alert_event)
    ttk.Label(mainframe, textvariable= Alertevent_str, font = ('Arial', 15), wraplength= 450
            ).grid(column= 0, row= 12, columnspan= 4, pady= 0, sticky= 'W')

    Alert_start = Alert_data['startDate']
    Alert_start = Wrpt.Ts_to_Dt((Alert_start)[0])
    Alertstart_str = StringVar()
    Alertstart_str.set("Alert Start: " + str(Alert_start))
    ttk.Label(mainframe, textvariable= Alertstart_str, font = ('Arial', 15), wraplength= 450
            ).grid(column= 0, row= 13, columnspan= 4, pady= 0, sticky= 'W')

    Alert_end = Alert_data['endDate']
    Alert_end = Wrpt.Ts_to_Dt((Alert_end)[0])
    Alertend_str = StringVar()
    Alertend_str.set("Alert End: " + str(Alert_end))
    ttk.Label(mainframe, textvariable= Alertend_str, font = ('Arial', 15), wraplength= 450
            ).grid(column= 0, row= 14, columnspan= 4, pady= 0, sticky= 'W')

    Alert_desc = Alert_data['description']
    Alertdesc_str = StringVar()
    Alertdesc_str.set(Alert_desc)
    ttk.Label(mainframe, textvariable= Alertdesc_str, font = ('Arial', 15), wraplength= 450
            ).grid(column= 0, row= 15, columnspan= 4, pady= 0, sticky= 'W')

    
    Alert_tags = Alert_data['tags']
    Alerttags_str = StringVar()
    Alerttags_str.set("Tags: " + str(Alert_tags))
    ttk.Label(mainframe, textvariable= Alerttags_str, font = ('Arial', 15), wraplength= 450
            ).grid(column= 0, row= 16, columnspan= 4, pady= 0, sticky= 'W')

root.mainloop()

