import tkinter as tk
from tkinter import scrolledtext
from datetime import datetime
from requests import get, post, put
from editjson import *
from sys import exit

SETTINGS = read_key("dataSaveSETTINGS.json")


# SERVER FUNCTIONS

def server_post(url, params):
    response = post(url, params=params)
    if response.status_code not in SETTINGS["allowed_resp"]:
        exit("data exit " + str(response.json()))

def server_put(url, params):
    response = put(url, params=params)
    if response.status_code not in SETTINGS["allowed_resp"]:
        exit("data exit " + str(response.json()))

def server_get(url, params):
    response = get(url, params=params)
    if response.status_code not in SETTINGS["allowed_resp"]:
        exit("data exit " + str(response.json()))
    return response.json()

def server_token():
    response = post(SETTINGS["url_token"], json={"username":SETTINGS["username"], "password":SETTINGS["password"]})
    if response.status_code not in SETTINGS["allowed_resp"]:
        exit("data exit " + str(response.json()))
    return response.json()

# MESSAGES

def get_messages():
    server_token()

    chatroom_data = server_get(
        SETTINGS["url_data"],
        {
            "username": SETTINGS["username"],
            SETTINGS["storage_data_param_name"]: SETTINGS["storage_data_param"]
        }
    )

    messages = []
    public_chat_data = chatroom_data

    for i in public_chat_data:
        for o in public_chat_data[i]:
            message_time = o.split("-")[0]
            message_date = message_time.split(";")[1].split(".")
            message_time = message_time.split(";")[0].split(":")
            message_text = "".join(o.split("-")[1:])
            message_author = i

            message_date = (int(message_date[2]), int(message_date[1]), int(message_date[0]))
            message_time = (int(message_time[0]), int(message_time[1]), int(message_time[2]))

            messages.append((message_date, message_time, message_author, message_text))

    # Sortierung (vereinfacht)
    messages.sort(key=lambda x: (x[0], x[1]))

    return messages


# ---------------- GUI ----------------

class ChatApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Chatroom GUI")

        self.chat_box = scrolledtext.ScrolledText(root, width=60, height=25)
        self.chat_box.pack(padx=10, pady=10)
        self.chat_box.config(state="disabled")

        self.entry = tk.Entry(root, width=50)
        self.entry.pack(padx=10, pady=5)

        self.send_button = tk.Button(root, text="Senden", command=self.send_message)
        self.send_button.pack()

        self.refresh_chat()

    def update_chatbox(self, messages):
        self.chat_box.config(state="normal")
        self.chat_box.delete("1.0", tk.END)

        for m in messages:
            self.chat_box.insert(
                tk.END,
                f"{m[2]} > {m[3]}\n"
            )

        self.chat_box.config(state="disabled")

    def refresh_chat(self):
        try:
            messages = get_messages()
            self.update_chatbox(messages)
        except Exception as e:
            print("Error:", e)

        self.root.after(2000, self.refresh_chat)  # alle 2 Sekunden aktualisieren

    def send_message(self):
        text = self.entry.get().strip()
        if not text:
            return

        jetzt = datetime.now()
        message_format = f"{jetzt.hour}:{jetzt.minute}:{jetzt.second};{jetzt.day}.{jetzt.month}.{jetzt.year}-{text}"

        # Token holen
        server_token()

        # Nachricht senden
        server_put(
            SETTINGS["url_chatroom"],
            {
                "username": SETTINGS["username"],
                "new_data": message_format
            }
        )

        self.entry.delete(0, tk.END)


# ---------------- START ----------------

root = tk.Tk()
app = ChatApp(root)
root.mainloop()
