#!/usr/bin/env python3

import os
import tkinter as tk
from tkinter import ttk, StringVar
from tkinter.messagebox import showinfo
from datetime import datetime
from PIL import Image, ImageTk

now = datetime.now()
YEAR = now.strftime("%Y")
MONTH = now.strftime("%m")
DAY = now.strftime("%d")
journal_filename = "%s-%s-%s-Journal.txt" % (YEAR, MONTH, DAY)

#
# determine OS to correctly save journal file and to switch back to one-branch development for convenience
if os.name == 'posix':
    journal_filename_path = "./%s" % journal_filename

if os.name == 'nt':
    journal_filename_path = "$Env:AppData/%s" % journal_filename

if not os.path.exists(journal_filename_path):
    with open(journal_filename_path, "w"):
        pass
else:
    with open(journal_filename_path, "a"):
        pass

journal = tk.Tk()
journal.attributes('-alpha', 0.5)

#
# set window to fullscreen (dependend of the actual screensize) and fill with a background image
image_location = 'background.jpg'
width = journal.winfo_screenwidth()
height = journal.winfo_screenheight()
journal.geometry("%dx%d" % (width, height))
journal.title("Ameland Kinderjournal")

img = ImageTk.PhotoImage(Image.open(image_location).resize((width, height), Image.ADAPTIVE))
label = tk.Label(journal, image=img)

#
# Keep a reference in case this code is put in a function.
label.img = img

#
# Place label in center of parent.
label.place(relx=0.5, rely=0.5, anchor='center')

#
# store name and message
name = tk.StringVar()
message = tk.StringVar()

#
# Main Window
journal = ttk.Frame(journal)
journal.pack(pady=100, side=tk.TOP)

#
# name
name_label = ttk.Label(journal, text = "Dein Name:")
name_label.grid(sticky = 'w', column = 0, row = 0, padx = 5, pady = 5)
name_entry = ttk.Entry(journal, textvariable = name, width = 70)
name_entry.grid(sticky = 'e', column = 0, row = 0, padx = 90, pady = 5)
name_entry.focus()

#
# textbox
# TODO: textbox need a scrollbar when applicable
# standard height of the textbox is 40 unless the screen provides more space in which case we will compute
# the textbox_heigth reasonably and relatively to the screensize
textbox_height: int = 40
if height > 1080:
    textbox_height = height - 1400

message_label = tk.Label(journal, text = "Deine Nachricht:")
message_label.grid(column = 0, row = 1, sticky = 'w', padx = 5)
message_text = tk.Text(journal, height = textbox_height)
message_text.grid(column = 0, row = 2, padx = 5)

def send_button_clicked():
    with open(journal_filename_path, "a") as journal_of_the_day:
        journal_of_the_day.write("Eintrag von: " + name.get() + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")
        journal_of_the_day.write(message_text.get(1.0, "end-1c") + "\n")
        journal_of_the_day.write("-----------------\n")
        message_text.delete('1.0', "end-1c")
        name.set("")
        showinfo(title = "Information", message = "Deine Nachricht wurde gespeichert")

def save_and_quit_button_clicked():
    with open(journal_filename_path, "a") as journal_of_the_day:
        journal_of_the_day.write(name.get() + "\n")
        journal_of_the_day.write(message_text.get(1.0, "end-1c") + "\n")
        journal_of_the_day.write("-----------------\n")
        if not name.get():
            journal_of_the_day.write("Speichern und Beenden von: " + "<noname>" + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")
        else:
            journal_of_the_day.write("Speichern und Beenden von: " + name.get() + " um " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n")
        journal.quit()

#
# Send Button
button_send = ttk.Button(
    journal,
    text = "Abschicken",
    command = lambda: send_button_clicked()
)
button_send.grid(sticky = 'w', column = 0, row = 3, ipady = 8, padx = 5, pady = 5)

#
# Quit Button
button_quit = ttk.Button(
    journal,
    text = "Speichern und Beenden",
    command = lambda: save_and_quit_button_clicked()
)
button_quit.grid(sticky = 'e', column = 0, row = 3, ipady = 8, padx = 5, pady = 5)

journal.mainloop()
