import json
import tkinter as tk

class Vozidlo:
	def __init__(self, znacka, typ, barva, cena_za_den):
		self.znacka = znacka
		self.cislo = None
		self.typ = typ
		self.barva = barva
		self.cena_za_den = cena_za_den
		self.pujceno = False
		self.zakaznik = None

	def __str__(self):
		return f"Číslo auta: {self.cislo}, značka {self.znacka}, {self.typ}, {self.barva}, cena za den: {self.cena_za_den}, půjčeno: {self.pujceno}"
	
	def jePujcenoText(self):
		if self.pujceno:
			text = "Vozidlo je půjčeno"
		else:
			text = "Vozidlo je k dispozici"
		return text


	def pujcit(self):
		if not self.pujceno:
			self.pujceno = True
			print(f"Vozidlo {self.cislo} bylo půjčeno")
		else:
			print("Vozidlo je již půjčeno, nelze půjčit")

	def vratit(self):
		if self.pujceno:
			self.pujceno = False
			print("Vozidlo bylo vráceno")
		else:
			print("Nelze vrátit vozidlo, které nebylo půjčené")

	def preved_na_slovnik(self):
		return {
			"znacka": self.znacka,
        	"model": self.typ,
        	"barva": self.barva,
        	"cena_za_den": self.cena_za_den
		}

class Pujcovna:
	def __init__(self):
		self.vozidla = []
		self.cislo = 1 

	def pridat_vozidlo(self, vozidlo):
		vozidlo.cislo = self.cislo
		self.cislo += 1
		self.vozidla.append(vozidlo)

	def dostupna_vozidla(self):
		print("Dostupná vozidla v půjčovně:")
		for v in self.vozidla:
			if not v.pujceno:
				print(v)

	def vypis_vozidla(self):
		#print("Všechna vozidla v půjčovně:")
		return self.vozidla

	def vyber_vozidlo(self, cislo):
		for v in self.vozidla:
			if v.cislo == cislo:
				return self.vozidla[cislo-1]
		return False

class Aplikace:
	def __init__(self, root):
		self.root = root
		self.root.title("Půjčovna aut")
		self.root.geometry("500x400")
		self.pujcovna = Pujcovna()
		self.pocatecni_data()
		self.ukaz_okno()

	def pocatecni_data(self):
		with open("vozidla.json", "r", encoding="utf-8") as soubor:
			data = json.load(soubor)
			print(data)
		for v in data:
			self.pujcovna.pridat_vozidlo(Vozidlo(v['znacka'],v['model'],v['barva'],v['cena_za_den']))

	def ukaz_okno(self):
		self.listbox = tk.Listbox(self.root, width=80)
		self.listbox.pack(pady=10)
		self.ukaz_list_aut()

		self.btn = tk.Button(self.root, text="Půjčit vozidlo", command=self.zpracuj_vyber)
		self.btn.pack(pady=10)
		self.btn = tk.Button(self.root, text="Přidat vozidlo", command=self.pridat_vozidlo)
		self.btn.pack(pady=10)

	def ukaz_list_aut(self):
		self.listbox.delete(0, tk.END)
		for v in self.pujcovna.vozidla:
			self.listbox.insert(tk.END, v)

	def zpracuj_vyber(self):
		index = self.listbox.curselection()
		#print(index[0]+1)
		self.pujcovna.vyber_vozidlo(index[0]+1).pujcit()
		self.ukaz_list_aut()


	def pridat_vozidlo(self):
		nove_okno = tk.Toplevel(self.root)
		nove_okno.title("Přidat nové vozidlo")

		tk.Label(nove_okno, text="Značka auta:").grid(row=0, column=0, sticky="w")
		znacka_entry = tk.Entry(nove_okno)
		znacka_entry.grid(row=0, column=1)

		tk.Label(nove_okno, text="Model auta:").grid(row=1, column=0, sticky="w")
		model_entry = tk.Entry(nove_okno)
		model_entry.grid(row=1, column=1)

		tk.Label(nove_okno, text="Barva:").grid(row=2, column=0, sticky="w")
		barva_entry = tk.Entry(nove_okno)
		barva_entry.grid(row=2, column=1)

		tk.Label(nove_okno, text="Cena:").grid(row=3, column=0, sticky="w")
		cena_entry = tk.Entry(nove_okno)
		cena_entry.grid(row=3, column=1)

		def ulozit_vozidlo():
			v = Vozidlo(
					znacka_entry.get(),
					model_entry.get(),
					barva_entry.get(),
					cena_entry.get()
					)
			self.pujcovna.pridat_vozidlo(v)
			for v in self.pujcovna.vypis_vozidla():
				print(v.preved_na_slovnik())
				
			#with open("vozidla.json", "r+", encoding="utf-8") as soubor:
			#	data = json.load(soubor)
			#	data.append(v.preved_na_slovnik())
			#	json.dump(data, soubor, ensure_ascii=False, indent=4)

			nove_okno.destroy()
			self.ukaz_list_aut()

		btn = tk.Button(nove_okno, text="Uložit vozidlo", command=ulozit_vozidlo)
		btn.grid(row=4, column=0)


root = tk.Tk()
aplikace = Aplikace(root)
root.mainloop()