import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("raspberrypi", 5000))

import tkinter as tk
from tkinter import ttk
import threading
import time
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import sv_ttk


def use_data():
    while True:
        with open("data.txt", "r") as file:
            data = file.read()
            file_data = data.split()
            last_data = file_data[-1]
            sensor_number = last_data[:1]
            pseudo_sensor_value = last_data[1:]
            global sensor_value
            sensor_value = pseudo_sensor_value[1:]
            global sensor4
            if sensor_number == "1":
                sensor4.append(sensor_value)
                sensor4 = sensor4[1:]
            global sensor3 
            if sensor_number == "2":
                sensor3.append(sensor_value)
                sensor3 = sensor3[1:]

root = tk.Tk()

cf1 = ttk.LabelFrame(root, text="Data:", padding=(50, 10))
cf1.grid(row=0, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew")

cf2 = ttk.LabelFrame(cf1, text="Sensor 1:", padding=(50, 10))
cf2.grid(row=0, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew")

cf3 = ttk.LabelFrame(root, text="Soil Moisture Sensors:", padding=(50, 10))
cf3.grid(row=0, column=1, padx=(20, 10), pady=(20, 10), sticky="nsew")

cf4 = ttk.LabelFrame(cf1, text="Temperature Sensor:", padding=(50, 10))
cf4.grid(row=1, column=0, padx=(20, 10), pady=(20, 10), sticky="nsew")

label1 = ttk.Label(cf3, text="Sensor 1:")
label1.grid(row=0, column=0, padx=10, pady=10)

sv_ttk.set_theme("dark")

label2 = ttk.Label(cf3, text="Sensor 2:")
label2.grid(row=1, column=0, padx=10, pady=10)

label3 = ttk.Label(cf3, text="Sensor 3:")
label3.grid(row=2, column=0, padx=10, pady=10)

label4 = ttk.Label(cf3, text="Sensor 4:")
label4.grid(row=3, column=0, padx=10, pady=10)

sensor4 = ["0", "0", "0", "0"]
sensor4int = [0, 0, 0, 0]
time_x = [0, 0, 0, 0]
sensor3 = ["0", "0", "0", "0"]
sensor3int = [0, 0, 0, 0]
i = 0

def plotgraph4():
    for widget in cf2.winfo_children():
        widget.destroy()
    fig, ax = plt.subplots()
    ax.plot(time_x, sensor4int)
    ax.set_xlabel('Time')
    ax.set_ylabel('Sensor Value')
    ax.set_title('Soil Moisture Level, Sensor 1')
    canvas = FigureCanvasTkAgg(fig, master=cf2)
    canvas.draw()
    canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
    plt.close(fig)
    root.after(2000, plotgraph4)


def plotgraph3():
    for widget in cf4.winfo_children():
        widget.destroy()
    fig, ax = plt.subplots()
    ax.plot(time_x, sensor3int)
    ax.set_xlabel('Time')
    ax.set_ylabel('Temperature')
    ax.set_title('Temperature Levels')
    canvas = FigureCanvasTkAgg(fig, master=cf4)
    canvas.draw()
    canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)
    plt.close(fig)
    root.after(2000, plotgraph3)
##def use_data():
##    while True:
##        with open("data.txt", "r") as file:
##            file_data = file.read()
##            data = file_data.split()
##            last_data = data[-1]
##            sensor_number = last_data[:1]
##            pseudo_sensor_value = last_data[1:]
##            sensor_value = pseudo_sensor_value[1:]
##            global sensor4
##            if sensor_number == "4":
##                if sensor4[-1] == sensor_value:
##                    pass
##                else:
##                    sensor4.append(sensor_value)
##                    sensor4 = sensor4[1:]
##            elif sensor_number == "3":
##                if sensor3[-1] == sensor_value:
##                    pass
##                else:
##                    sensor3.append(sensor_value)
##                    sensor3 = sensor3[1:]

def stopwatch():
    global time_x
    global i
    while True:
        time.sleep(1)
        i += 1
        time_x.append(i)
        time_x = time_x[1:]

def convert():
    global sensor4int, sensor4, sensor3, sensor3int
    while True:
        sensor4int = [int(val) for val in sensor4]
        sensor3int = [int(val) for val in sensor3]
        time.sleep(2)

def receive_data():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("raspberrypi", 5000))
    
    while True: 
        with open("data.txt", "a") as file:
            x = s.recv(1024).decode("utf-8")
            file.write(x + "\n")

threads = [
    threading.Thread(target=receive_data),
    threading.Thread(target=use_data),
    threading.Thread(target=convert),
    threading.Thread(target=stopwatch)
]

for thread in threads:
    thread.start()

plotgraph4()
plotgraph3()
root.mainloop()
