from http.server import HTTPServer, BaseHTTPRequestHandler
from tkinter import *
from tkinter.ttk import *
from PIL import Image, ImageTk
import threading
import socket

ip = socket.gethostbyname(socket.gethostname())
def score_change(team, operation, amount):
    if operation == 'plus':
        team.set(team.get() + int(amount))
    elif operation == 'minus':
        team.set(team.get() - int(amount))
def score_set(team, amount):
    team.set(int(amount))

bluescore = 0
redscore = 0
def scoreBoard():
    root = Tk()
    #Both Team's Scores
    global bluescore
    global redscore
    bluescore = IntVar()
    redscore = IntVar()
    #Changes the score for anyteam

    #+1 Red Button
    redPlus = Button(root, width=20, text="+1 Red")
    redPlus.bind("<Button-1>", lambda event: score_change(redscore, 'plus', 1))
    redPlus.place(relx=0.60, rely=0.85)

    #-1 Red Button
    redMinus = Button(root, width=20, text="-1 Red")
    redMinus.bind("<Button-1>", lambda event: score_change(redscore, 'minus', 1))
    redMinus.place(relx=0.60, rely=0.9)

    #+10 Red Button
    redPlus = Button(root, width=20, text="+10 Red")
    redPlus.bind("<Button-1>", lambda event: score_change(redscore, 'plus', 10))
    redPlus.place(relx=0.70, rely=0.85)

    #-10 Button
    redPlus = Button(root, width=20, text="-10 Red")
    redPlus.bind("<Button-1>", lambda event: score_change(redscore, 'minus', 10))
    redPlus.place(relx=0.70, rely=0.9)

    #Reset Red Button
    redPlus = Button(root, width=20, text="Reset")
    redPlus.bind("<Button-1>", lambda event: score_set(redscore, 0))
    redPlus.place(relx=0.64, rely=0.08)

    #+1 Blue Button
    bluePlus = Button(root, width=20, text="+1 Blue")
    bluePlus.bind("<Button-1>", lambda event: score_change(bluescore, 'plus', 1))
    bluePlus.place(relx=0.10, rely=0.85)

    #-1 Blue Button
    blueMinus = Button(root, width=20, text="-1 Blue")
    blueMinus.bind("<Button-1>", lambda event: score_change(bluescore, 'minus', 1))
    blueMinus.place(relx=0.10, rely=0.9)

    #+10 Red Button
    redPlus = Button(root, width=20, text="+10 Red")
    redPlus.bind("<Button-1>", lambda event: score_change(bluescore, 'plus', 10))
    redPlus.place(relx=0.20, rely=0.85)

    #-10 Button
    redPlus = Button(root, width=20, text="-10 Red")
    redPlus.bind("<Button-1>", lambda event: score_change(bluescore, 'minus', 10))
    redPlus.place(relx=0.20, rely=0.9)

    #Reset Red Button
    redPlus = Button(root, width=20, text="Reset")
    redPlus.bind("<Button-1>", lambda event: score_set(bluescore, 0))
    redPlus.place(relx=0.125, rely=0.08)

    #Red score on Screen
    redLabel = Label(root, textvariable = redscore)
    redLabel.configure(foreground="red", font=("TkDefaultFont", 320))
    redLabel.place(relx=0.61, rely=0.15)

    #Blue Score on Screen
    blueLabel = Label(root, textvariable = bluescore)
    blueLabel.configure(foreground="blue", font=("TkDefaultFont", 320))
    blueLabel.place(relx=0.1, rely=0.15)

    #Red name tag
    redNameLabel = Label(root, text="RED")
    redNameLabel.configure(foreground="red", font=("TkDefaultFont", 60))
    redNameLabel.place(relx=0.63, rely=0.125)

    #Blue name tag
    blueNameLabel = Label(root, text="BLUE")
    blueNameLabel.configure(foreground="blue", font=("TkDefaultFont", 60))
    blueNameLabel.place(relx=0.11, rely=0.125)

    #Kings Kids Logo
    logoFile = Image.open("Kings-Kids.png")
    logoImg = ImageTk.PhotoImage(logoFile)
    logo = Label(root, image=logoImg)
    logo.place(relx=0.41, y=0.1)
    root.mainloop()

class Serv(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/":
            self.path = '/index.html'
        try:
            file_to_open = open(self.path[1:]).read()
            self.send_response(200)
        except:
            file_to_open = "File not found"
            self.send_response(404)
        self.end_headers()
        self.wfile.write(bytes(file_to_open, 'utf-8'))

    def do_POST(self):
        if self.path == "/":
            self.path = '/index.html'
        try:
            file_to_open = open(self.path[1:]).read()
            self.send_response(200)
        except:
            file_to_open = "File not found"
            self.send_response(404)
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)[:3]
        if post_data.decode("utf-8")[0] == "b":
            if post_data.decode("utf-8")[1] == "p":
                if post_data.decode("utf-8")[2] == "1":
                    score_change(bluescore, 'plus', 1)
                elif post_data.decode("utf-8")[2] == "2":
                    score_change(bluescore, 'plus', 10)
            elif post_data.decode("utf-8")[1] == "m":
                if post_data.decode("utf-8")[2] == "1":
                    score_change(bluescore, 'minus', 1)
                elif post_data.decode("utf-8")[2] == "2":
                    score_change(bluescore, 'minus', 10)
        if post_data.decode("utf-8")[0] == "r":
            if post_data.decode("utf-8")[1] == "p":
                if post_data.decode("utf-8")[2] == "1":
                    score_change(redscore, 'plus', 1)
                elif post_data.decode("utf-8")[2] == "2":
                    score_change(redscore, 'plus', 10)
            elif post_data.decode("utf-8")[1] == "m":
                if post_data.decode("utf-8")[2] == "1":
                    score_change(redscore, 'minus', 1)
                elif post_data.decode("utf-8")[2] == "2":
                    score_change(redscore, 'minus', 10)
        self.end_headers()
        self.wfile.write(bytes(file_to_open, 'utf-8'))
print(ip)
httpd = HTTPServer((ip, 8080), Serv)
t = threading.Thread(target=scoreBoard)
t.daemon = True
t.start()
httpd.serve_forever()