from tkinter import *
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import pandas as pd

class Tabla:
    def __init__(self,root, dataFrame, anchos, fechas, bgColor, posX, posY):
        self.anchos = anchos
        self.fechas = fechas
        self.nuevoDatos = []
        self.componentes = []
        cont = 0
        self.df = dataFrame
        self.frm = ttk.Frame(root)
        for k in dataFrame:
            tmp = Entry(self.frm, width=anchos[cont], bg=bgColor, fg='black', font= ('Arial', 12),
                            highlightthickness=1, highlightbackground="#000000", highlightcolor="#000000")
            tmp.grid(row=0, column=cont)
            tmp.insert(INSERT, k)
            cont += 1
        self.lista = list(dataFrame.to_records(index=False))
        self.filas = len(self.lista)
        self.columnas = cont
        for i in range(self.filas): 
            row = []
            for j in range(self.columnas): 
                aux = Entry(self.frm, width=anchos[j], fg='black', 
                               font=('Arial',12,), highlightthickness=1, highlightbackground="#000000", highlightcolor="#000000") 
                aux.grid(row=i + 1, column=j) 
                if len(fechas) == 0:
                    aux.insert(INSERT, self.lista[i][j])
                else:
                    if j in fechas:
                        aux.insert(INSERT, pd.to_datetime(self.lista[i][j]).date().strftime('%d/%m/%y'))
                    else:
                        aux.insert(INSERT, self.lista[i][j])
                aux.configure(state='readonly')
                row.append(aux)
            self.componentes.append(row)
        self.frm.pack()
        self.frm.place(x=posX, y=posY)
    
    def limpiar(self):
        for widget in self.frm.winfo_children():
            widget.destroy()

class EquiposFrame():
    def __init__(self, ventana):
        self.cantEquipos = tk.StringVar()
        self.retirados = tk.StringVar()
        self.inscritos = tk.StringVar()
        self.mostrarTabla(ventana)
        tk.Label(ventana, text='Equipos', font=('Arial Black', 12), bg="#3a7ff6", width=25).place(x=15, y=50)
        tk.Button(ventana, text='listar', font=('Arial', 12), width=8, height=2, highlightbackground = "black", borderwidth=5, bg="white", command= lambda: self.mostrarTabla(ventana)).place(x=40, y=120)
        tk.Button(ventana, text='borrar', font=('Arial', 12), width=8, height=2,  bg="white", borderwidth = 5, command=self.limpiarTabla).place(x=170, y=120)
        tk.Label(ventana, text='Cantidad de equipos', font=('Arial', 12), bg="white").place(x=25, y=220)
        tk.Label(ventana, text='Equipos retirados', font=('Arial', 12), bg="white").place(x=25, y=260)
        tk.Label(ventana, text='Equipos incritos', font=('Arial', 12), bg="white").place(x=25, y=300)
        tk.Button(ventana, textvariable=self.cantEquipos, font=('Arial', 12), state='disabled').place(x=300, y=210)
        tk.Button(ventana, textvariable=self.retirados, font=('Arial', 12), state='disabled').place(x=300, y=250)
        tk.Button(ventana, textvariable=self.inscritos, font=('Arial', 12), state='disabled').place(x=300, y=290)

    
    def mostrarTabla(self, ventana):
        archivo = pd.read_excel('Equipos.xlsx', sheet_name='Hoja1')
        self.cantEquipos.set(str(len(archivo['N°'])))
        self.retirados.set(list(archivo['Retirado']).count('Si'))
        self.inscritos.set(list(archivo['Retirado']).count('No'))
        # self.retirados.set(str(list(archivo['Retirado'].count('No'))))
        anchos = [5, 40, 20, 18, 10]
        fechas = []
        self.tabla = Tabla(ventana, archivo,anchos,fechas,'#3a7ff6', 50, 350)

    def limpiarTabla(self):
        self.tabla.limpiar()

class CampeonatoFrame():
    def __init__(self, ventana):
        self.temporada = tk.StringVar()
        self.inicio = tk.StringVar()
        self.fin = tk.StringVar()
        tk.Label(ventana, text='Campeonato', font=('Arial Black', 12), bg="#3a7ff6", width=25).place(x=15, y=50)
        tk.Label(ventana, text='Fecha de Inicio', font=('Arial', 12), bg="white").place(x=25, y=100)
        tk.Label(ventana, text='Fecha Final', font=('Arial', 12), bg="white").place(x=25, y=140)
        tk.Entry(ventana, bd=3, bg="#F6F7F9", highlightthickness=2,  font=("Arial", 11), textvariable=self.temporada).place(x=300, y=50, width=120.0, height=30)
        tk.Entry(ventana, bd=3, bg="#F6F7F9", highlightthickness=2,  font=("Arial", 11), textvariable=self.inicio).place(x=300, y=90, width=120.0, height=30)
        tk.Entry(ventana, bd=3, bg="#F6F7F9", highlightthickness=2,  font=("Arial", 11), textvariable=self.fin).place(x=300, y=130, width=120.0, height=30)
        tk.Button(ventana, text='GENERAR', wraplength=125, justify=tk.LEFT, relief='flat', font=('Arial', 16, "bold"), anchor="w", borderwidth = 0, highlightthickness = 15, compound = 'center', bg="#3a7ff6", fg="white", activebackground="#3a7ff6", command= lambda: self.mostrarTabla(ventana)).place(x=500, y=70)
    
    def mostrarTabla(self, ventana):
        archivo = pd.read_excel('Partidos.xlsx', sheet_name='Hoja1')
        anchos = [5, 10, 60]
        fechas = [1]
        self.tabla = Tabla(ventana, archivo,anchos,fechas,'#3a7ff6', 50, 350)

class ListaRegistroFrame():
    def __init__(self, ventana):
        self.equipo = tk.StringVar()
        self.representante = tk.StringVar()
        self.jugadores = tk.StringVar()
        self.mostrarTabla(ventana)
        tk.Label(ventana, text='Lista de Registro', font=('Arial Black', 12), bg="#3a7ff6", width=25).place(x=15, y=50)
        tk.Label(ventana, text='Nombre del Equipo', font=('Arial', 12), bg="white").place(x=25, y=100)
        tk.Label(ventana, text='Representante', font=('Arial', 12), bg="white").place(x=25, y=140)
        tk.Label(ventana, text='Cantidad de Jugadores', font=('Arial', 12), bg="white").place(x=25, y=180)
        tk.Entry(ventana, bd=1, bg="#F6F7F9", highlightthickness=2,  font=("Arial", 11), textvariable=self.equipo).place(x=320, y=90, width=220.0, height=30)
        tk.Entry(ventana, bd=1, bg="#F6F7F9", highlightthickness=2,  font=("Arial", 11), textvariable=self.representante).place(x=320, y=130, width=220.0, height=30)
        tk.Entry(ventana, bd=1, bg="#F6F7F9", highlightthickness=2,  font=("Arial", 11), textvariable=self.jugadores).place(x=320, y=170, width=220.0, height=30)
        tk.Button(ventana, text='AGREGAR', wraplength=125, justify=tk.LEFT, relief='flat', font=('Arial', 16, "bold"), anchor="w", borderwidth = 0, highlightthickness = 15, compound = 'center', bg="#3a7ff6", fg="white", activebackground="#3a7ff6", command= lambda:self.agregarEquipo(ventana)).place(x=580, y=115)
    
    def mostrarTabla(self, ventana):
        archivo = pd.read_excel('Equipos.xlsx', sheet_name='Hoja1')
        anchos = [5, 40, 20, 18, 10]
        fechas = []
        self.tabla = Tabla(ventana, archivo,anchos,fechas,'#3a7ff6', 50, 350)

    def agregarEquipo(self, ventana):
        mensajes = ''
        if self.equipo.get() == "":
            mensajes += 'Debe ingresar el nombre del equipo\n'
        if self.jugadores.get().isnumeric() is False:
            mensajes += 'La cantidad de jugadores debe de ser un numero.\n'
        if self.representante.get() == "":
            mensajes += 'Debe ingresar el nombre del representante.\n'
        if len(mensajes) > 0:
            messagebox.showerror(title='ERROR', message=mensajes)
            return
        archivo = pd.read_excel('Equipos.xlsx', sheet_name='Hoja1')
        archivo.loc[archivo.shape[0]] = [len(archivo['N°']) + 1, self.equipo.get(), self.representante.get(), int(self.jugadores.get()), 'No']
        archivo.to_excel('Equipos.xlsx', sheet_name='Hoja1', index=False)
        self.jugadores.set('')
        self.equipo.set('')
        self.representante.set('')
        self.mostrarTabla(ventana)
     
class ReportesProblemasFrame():
    def __init__(self, ventana):
        tk.Label(ventana, text='Reporte de Problema', font=('Arial Black', 12), bg="#3a7ff6", width=25).place(x=15, y=50)
        tk.Label(ventana, text='Informar Incidencias', font=('Arial', 12), bg="white").place(x=25, y=100)
        tk.Label(ventana, text='Describa su inconveniente', font=('Arial', 12), bg="#3a7ff6").place(x=50, y=180)
        self.texto = tk.Text(ventana, font=('Arial', 12), width=50, height=12)
        self.texto.place(x=50, y=200)
        tk.Button(ventana, text='ENVIAR', wraplength=125, justify=tk.LEFT, relief='flat', font=('Arial', 16, "bold"), anchor="w", borderwidth = 0, highlightthickness = 0, compound = 'center', bg="#3a7ff6", fg="white", activebackground="#3a7ff6", command=self.reportar).place(x=300, y=450)
        tk.Button(ventana, text='BORRADOR', wraplength=125, justify=tk.LEFT, relief='flat', font=('Arial', 16, "bold"), anchor="w", borderwidth = 0, highlightthickness = 0, compound = 'center', bg="#3a7ff6", fg="white", activebackground="#3a7ff6", command=self.borrador).place(x=450, y=450)

    def reportar(self):
        archivo = pd.read_excel('Problemas.xlsx', sheet_name='Hoja1')
        archivo.loc[archivo.shape[0]] = [len(archivo['Codigo']) + 1, self.texto.get("1.0","end-1c")]
        archivo.to_excel('Problemas.xlsx', sheet_name='Hoja1', index=False)
        self.texto.delete(1.0,END)
        messagebox.showinfo(title='EXITOSO', message='El problema se ha reportado satisfactoriamente')
    
    def borrador(self):
        self.texto.delete(1.0,END)

class GestionEquipos():
    def __init__(self):
        self.main_window = tk.Tk()
        w = 1000
        h = 650
        screen_width = self.main_window.winfo_screenwidth()
        screen_height = self.main_window.winfo_screenheight()
        x = (screen_width/2) - (w/2)
        y = (screen_height/2) - (h/2)
        self.main_window.geometry('%dx%d+%d+%d' % (w, h, x, y))
        self.formActual = EquiposFrame(self.main_window)
        self.agregarBotonesPrincipales()

        self.main_window.mainloop()
    
    def agregarBotonesPrincipales(self):
        tk.Button(self.main_window, text='Equipos', command=self.abrirEquiposFrm).place(x=0, y=0)
        tk.Button(self.main_window, text='Campeonato', command=self.abrirCampeonatoFrm).place(x=52, y=0)
        tk.Button(self.main_window, text='Lista de Registro', command=self.abrirListaRegistroFrm).place(x=131, y=0)
        tk.Button(self.main_window, text='Reporte de Problemas', command=self.abrirReporteProblemaFrm).place(x=227, y=0)
    
    def limpiarVentana(self):
        for widget in self.main_window.winfo_children():
            widget.destroy()
    
    def abrirEquiposFrm(self):
        self.limpiarVentana()
        self.agregarBotonesPrincipales()
        self.formActual = EquiposFrame(self.main_window)

    def abrirCampeonatoFrm(self):
        self.limpiarVentana()
        self.agregarBotonesPrincipales()
        self.formActual = CampeonatoFrame(self.main_window)

    def abrirListaRegistroFrm(self):
        self.limpiarVentana()
        self.agregarBotonesPrincipales()
        self.formActual = ListaRegistroFrame(self.main_window)

    def abrirReporteProblemaFrm(self):
        self.limpiarVentana()
        self.agregarBotonesPrincipales()
        self.formActual = ReportesProblemasFrame(self.main_window)      


programa = GestionEquipos()