import math
import tkinter as tk
from tkinter import ttk

def switch():
    if radio_var.get() == 1:
        if check('valec',r_var.get(),v_var.get()):
            valec(check_var_objem.get(),check_var_povrch.get(),r_var.get(),v_var.get())
        else:
            objem_var.set('Nezadal si spravne hodnoty. Skus znova.')   
            povrch_var.set('') 
    elif radio_var.get() == 2:
        if check('gula',r_var.get()):
            gula(check_var_objem.get(),check_var_povrch.get(),r_var.get())
        else: 
            objem_var.set('Nezadal si spravne hodnoty. Skus znova.')   
            povrch_var.set('')     
    elif radio_var.get() == 3:    
        if check('kvader',None,v_var.get(),a_var.get(),b_var.get,c_var.get()):    
            kvader(check_var_objem.get(),check_var_povrch.get(),a_var.get(),b_var.get(),c_var.get(),v_var.get())
        else:
            objem_var.set('Nezadal si spravne hodnoty. Skus znova.')   
            povrch_var.set('')     
    else:
        print('Brasi nevybral si co chces')
     
def check(typ,r=None,v=None,a=None,b=None,c=None):
    match typ:
        case 'valec':
            if r != 0 and r != None and r > 0 and v != 0 and v != None and v > 0:
                return True
            else:
                return False
        case 'gula':
            if r != 0 and r != None and r > 0:
                return True
            else:
                return False 
        case 'kvader':  
            if c == 0 or c == None:
                if a != 0 and a != None and a > 0 and b != 0 and b != None and b > 0 and v != 0 and v != None and v > 0:
                    return True
                else:
                    return False    
            else:
                if a != 0 and a != None and a > 0 and b != 0 and b != None and b > 0 and c != 0 and c != None and c > 0:    
                    return True
                else:
                    return False  
            
        
def gula(objem,povrch,r,pi=math.pi):
    if objem == 1:
        objem_var.set(f'Objem: {round((4/3)*pi*r**3,2)}')

    if povrch == 1:
        povrch_var.set(f'Povrch: {round(4*pi*r**2,2)}')
def kvader(objem,povrch,a,b,c,v):
    if objem == 1:
        if c != 0 or c != "":
            objem_var.set(f'Objem: {round(a*b*c)}')
        else:
            objem_var.set(f'Objem: {round(a*b*v)}')   

    if povrch == 1:
        if c != 0:
            povrch_var.set(f'Povrch: {round(2*(a*b+a*c+b*c))}')
        else:
            povrch_var.set(f'Povrch: {round(2*(a*v+a*v+b*v))}')

def valec(objem,povrch,r,v,pi=math.pi):                
    if objem == 1:
        objem_var.set(f'Objem: {(4/3)*pi*r**3}')

    if povrch == 1:
        povrch_var.set(f'Povrch: {4*pi*r**2}')
    
# window
root = tk.Tk()
root.title('Objem a povrch telies')
root.geometry('800x450')

# input
a_var = tk.DoubleVar()
b_var = tk.DoubleVar()
c_var = tk.DoubleVar()
r_var = tk.DoubleVar()
v_var = tk.DoubleVar()

ttk.Label(root,text='a',font='Calibri 12 bold').pack()
a = ttk.Entry(root,textvariable=a_var)
a.pack()

ttk.Label(root,text='b',font='Calibri 12 bold').pack()
b = ttk.Entry(root,textvariable=b_var)
b.pack()

ttk.Label(root,text='c',font='Calibri 12 bold').pack()
c = ttk.Entry(root,textvariable=c_var)
c.pack()

ttk.Label(root,text='r',font='Calibri 12 bold').pack()
r = ttk.Entry(root,textvariable=r_var)
r.pack()

ttk.Label(root,text='v',font='Calibri 12 bold').pack()
v = ttk.Entry(root,textvariable=v_var)
v.pack()

objem_var = tk.StringVar()
objem = ttk.Label(root,text=f'Objem: {objem_var}',font='Calibri 12 bold',textvariable=objem_var)
objem.pack()

povrch_var = tk.StringVar()
povrch = ttk.Label(root,text=f'Povrch: {povrch_var}',font='Calibri 12 bold',textvariable=povrch_var)
povrch.pack()


# button
spustac = ttk.Button(root,text='Vypocitaj',command=switch)
spustac.pack(side='bottom')

# options
radio_var = tk.IntVar(value=0)
radio1 = ttk.Radiobutton(root,text = 'Valec',value=1,variable=radio_var)
radio1.pack(side='bottom')

radio2 = ttk.Radiobutton(root,text = 'Gula',value=2,variable=radio_var)
radio2.pack(side='bottom')

radio3 = ttk.Radiobutton(root,text = 'Kvader',value=3,variable=radio_var)
radio3.pack(side='bottom')


check_var_objem = tk.IntVar()
check_var_povrch = tk.IntVar()

objem_check = ttk.Checkbutton(root,text='Objem',offvalue=0,onvalue=1,variable=check_var_objem)
objem_check.pack(side='bottom')

povrch_check = ttk.Checkbutton(root,text='Povrch',offvalue=0,onvalue=1,variable=check_var_povrch)
povrch_check.pack(side='bottom')

root.mainloop()