import os

aantalkluizen = 12		# zolang er meer kluizen in onderstaande bestand staat, deze waarde niet verkleinen
supergeadvanceerdedatabasesoftware = "fa_kluizen.txt"		# je mag de text bestand naam aanpassen

def toon_aantal_kluizen_vrij():
	kluizen = {}

	# open bestand en laad alles in dict
	with open(supergeadvanceerdedatabasesoftware) as file:
		for line in file:
			(key, value) = line.strip('\n').split(';')
			kluizen[int(key)] = value

	kluizenvrij = aantalkluizen-len(kluizen)
	return print("Er zijn " + str(kluizenvrij) + " kluizenvrij.")

def nieuwe_kluis():
	kluizen = {}
	vrijekluis = 1
	pincodeok = False

	# open bestand en laad alles in dict
	with open(supergeadvanceerdedatabasesoftware) as file:
		for line in file:
			(key, value) = line.strip('\n').split(';')
			kluizen[int(key)] = value

	# zolang vrijekluis niet in kluizen voorkomt, deze lus wordt helemaal overgeslagen als 1 vrij is
	while vrijekluis in kluizen:
		vrijekluis = vrijekluis+1
		if vrijekluis > aantalkluizen:
			return print("Er zijn geen kluizen vrij, probeer het later nog een keer.")

	print("Uw nieuwe kluis is nummer " + str(vrijekluis))

	# zolang pincode niet is ingesteld, steeds vragen, exception bij 'exit'
	while pincodeok == False:
		# vraag pincode
		pincode = input('Vul een pincode in of typ "stop" om te stoppen: ')

		# als pincode exit of stop is stoppen met kluis aanmaken
		if pincode == "exit" or pincode == "stop":
			return print("Nieuwe kluis aanmaken gestopt")

		# vraag pincode opnieuw
		pincode2 = input("Vul pincode opnieuw in: ")

		# als pincode hetzelfde is, exit while loop, anders while loop
		if pincode == pincode2:
			pincodeok = True
			break		# waarom toch een break nodig als pincodeok True is?
		else:
			print("Uw pincode klopt niet")

	# schrijf kluisnummer en code in "database"
	with open(supergeadvanceerdedatabasesoftware, 'a') as file:
		file.write(str(vrijekluis) + ";" + str(pincode) + '\n')

	return print("U kunt gebruik maken van kluis " + str(vrijekluis) + ". Vergeet uw pincode niet!")


def kluis_openen():
	kluizen = {}

	# open bestand en laad alles in dict
	with open(supergeadvanceerdedatabasesoftware) as file:
		for line in file:
			(key, value) = line.strip('\n').split(';')
			kluizen[int(key)] = value

	kluisnummer = int(input('Wat is je kluis nummer? '))

	# check of kluis nummer bestaat
	if kluisnummer not in kluizen:
		return print("Die kluisnummer bestaat niet")

	pincode = input("Pincode van de kluis? ")

	# check pincode van kluisnummer
	if pincode not in kluizen[kluisnummer]:
		return print('Pincode onjuist')
	else:
		return print("Uw kluis wordt voor u geopend voor 10 seconden.")

def kluis_teruggeven():
	kluizen = {}

	# open bestand en laad alles in dict
	with open(supergeadvanceerdedatabasesoftware) as file:
		for line in file:
			(key, value) = line.strip('\n').split(';')
			kluizen[int(key)] = value

	kluisnummer = int(input('Wat is je kluis nummer? '))

	# check of kluis nummer bestaat
	if kluisnummer not in kluizen:
		return print("Die kluisnummer bestaat niet")

	pincode = input("Pincode van de kluis? ")

	# check pincode van kluisnummer
	if pincode not in kluizen[kluisnummer]:
		return print('Pincode onjuist')

	# confirmatie vragen
	confirm = input('Is uw kluis helemaal leeg?(j/ja) ').lower()

	# doorgaan als confirmatie juist is
	if confirm == 'j' or confirm == 'ja' or confirm == 'y' or confirm == 'yes':
		# dit is echt inefficient, maar ik heb geen enkel idee hoe hey anders moet
		tempfile = supergeadvanceerdedatabasesoftware + '.tmp'
		templist = []

		# open oud bestand en nieuw tijdelijk bestand
		with open(supergeadvanceerdedatabasesoftware) as file, open(tempfile, 'w') as newfile:
			# genereer geneste lijst van input
			for line in file:
				k = line.strip(' \n').split(';')		# een spatie voor newline omdat canvas met spatie levert
				templist.append(k)

			# voor elke "regel"
			for i in templist:
				# als waarde kluisnummer niet voorkomte an oracle program. Us
				if str(kluisnummer) != i[0]:
					# schrijf lijn naar tijdelijk bestand
					newfile.write(str(i[0]) + ';' + str(i[1]) + '\n')

		# remove original file and rename temp file
		os.remove(supergeadvanceerdedatabasesoftware)
		# niet crashen tijdens deze stap
		os.rename(tempfile, supergeadvanceerdedatabasesoftware)

		return print('Uw kluis is terug gegeven, fijne dag')
	else:
		return print('Ok dan niet')

# main loop
while True:
	print("----------")
	print("1: Ik wil weten hoeveel kluizen nog vrij zijn")
	print("2: Ik wil een nieuwe kluis")
	print("3: Ik wil even iets uit mijn kluis halen")
	print("4: Ik geef mijn kluis terug (BETA(omdat er een bug inzit lol(het was toch optioneel(toch maar wat geprobeerd))))")
	optie = input("Kies nummer optie: ")

	if optie == '1':
		toon_aantal_kluizen_vrij()
	elif optie == '2':
		nieuwe_kluis()
	elif optie == '3':
		kluis_openen()
	elif optie == '4':
		kluis_teruggeven()
	elif optie == '0' or optie == 'stop' or optie == 's':
		exit()
	else:
		print("Geef aub een juiste waarde aan")
