import os, sys, csv


def liesDaten(inputpath, schuljahr, halbjahr, inputs):


	# 0. Optionen festlegen

	jahrgaenge_zusammen = ''
	try:
	    jahrgaenge_zusammen = inputs["Jahrgänge"]["als_eine_Klasse"] + ","
	except KeyError:
	    print('Der Schlüssel Jahrgänge oder "als_eine_Klasse" existiert nicht in der Input-Datei!')
	    exit(0)

	ignoriere_jahrgaenge = ''
	try:
	    ignoriere_jahrgaenge = inputs["Jahrgänge"]["ignoriere_Jahrgänge"] + ","
	except KeyError:
	    print('Der Schlüssel Jahrgänge oder "ignoriere_Jahrgänge" existiert nicht in der Input-Datei!')
	    exit(0)

	# 1. Leistungsdaten einlesen

	leistungsdaten = open(os.path.join(inputpath, 'SchuelerLeistungsdaten.dat'), encoding="utf8")
	leistungsdatenReader = csv.reader(leistungsdaten, delimiter='|')

	linecount = 0
	schuelercount = 0

	schueler = ''
	aktuell_kurse = []

	alleklassen = set()
	klassenschueler = {}
	allekurse = {}

	for row in leistungsdatenReader:

		linecount = linecount + 1

		if (linecount>1) and (len(row)>0):  # Ignoriere den Header und evtl. Leerzeilen

			zelle = row[0]

			aktuell_klasse = ""
			if "#" in zelle:
				data = zelle.split('#')
				aktuell_nachname = data[0].strip()
				aktuell_klasse = data[1]

				aktuell_jahrgang = aktuell_klasse[0:-1]
				if ((aktuell_jahrgang+",") in jahrgaenge_zusammen):
					aktuell_klasse = aktuell_jahrgang
			else:
				aktuell_nachname = zelle

			aktuell_vorname = row[1].strip()
			aktuell_gebdatum = row[2]
			aktuell = aktuell_vorname+" "+aktuell_nachname+"#"+aktuell_gebdatum  # Datensatz eindeutig bestimmt

			aschuljahr = row[3]
			ahalbjahr = row[4]

			fach = row[5]
			lehrer = row[6]

			kursart = row[7]
			kurszelle = row[8]

			note = row[9]
			abifach = row[10]

			fehlstunden = row[17]
			unentschuldigt = row[18]
			
			mahnung = row[19]

			if (row[20]==''):
				sortierung = 1000
			else:
				sortierung = int(row[20])

			if not(aktuell_klasse in alleklassen):
				if not(aktuell_jahrgang+"," in ignoriere_jahrgaenge):
					if not(aktuell_klasse+"," in ignoriere_jahrgaenge):
						alleklassen.add(aktuell_klasse) # nur aktualisieren für aktuelles Halbjahr

			if (aktuell!=schueler):

				# neuen Schüler einfügen
				if (not aktuell_klasse in klassenschueler):
					dieschueler = []
					dieschueler.append(aktuell)
					klassenschueler[aktuell_klasse] = dieschueler
				else:
					schuelerliste = klassenschueler[aktuell_klasse]
					schuelerliste.append(aktuell)

				schueler = aktuell                  

			aktkurs = []
			aktkurs.append(fach)
			aktkurs.append(lehrer)
			aktkurs.append(kursart)
			aktkurs.append(note)
			aktkurs.append(abifach)
			aktkurs.append(fehlstunden)
			aktkurs.append(unentschuldigt)
			aktkurs.append(mahnung)
			aktkurs.append(sortierung)

			diekurse = allekurse.get(aktuell+aschuljahr+ahalbjahr)
			if diekurse:
				diekurse.append(aktkurs)
			else:
				diekurse = []
				diekurse.append(aktkurs)
				allekurse[aktuell+aschuljahr+ahalbjahr] = diekurse

	# 2. optional: Epochenunterricht einlesen

	epochen = {}

	epochenpfad = os.path.join(inputpath, 'epoche.csv')

	if os.path.exists(epochenpfad):

		epochendaten = open(epochenpfad, encoding="utf8")
		epochendatenReader = csv.reader(epochendaten, delimiter='|')

		linecount = 0

		for row in epochendatenReader:

		    linecount = linecount + 1

		    if linecount > 1:  # Ignoriere den header

		        klasse = row[0]
		        faecher = row[1]

		        epochen[klasse] = faecher+","


	# 3. Lernabschnittsdaten einlesen

	abschnittsdaten = open(os.path.join(inputpath, 'SchuelerLernabschnittsdaten.dat'), encoding="utf8")
	abschnittsdatenReader = csv.reader(abschnittsdaten, delimiter='|')

	alleabschnitte = {}

	linecount = 0

	for row in abschnittsdatenReader:

		linecount = linecount + 1

		if (linecount > 1) and (len(row)>0):  # Ignoriere den header

			zelle = row[0]

			aktuell_klasse = ""
			if "#" in zelle:
				data = zelle.split('#')
				aktuell_nachname = data[0].strip()
				aktuell_klasse = data[1]
			else:
				aktuell_nachname = zelle

			aktuell_vorname = row[1].strip()
			aktuell_gebdatum = row[2]
			aktuell = aktuell_vorname+" "+aktuell_nachname+"#"+aktuell_gebdatum  # Datensatz eindeutig bestimmt

			aschuljahr = row[3]
			ahalbjahr = row[4]
			ajahrgang = row[5]

			wertung = row[14]
			wdh = row[15]
			versetzt = row[17]
			abschluss = row[18]
			fehlstunden = row[22]
			unentschuldigt = row[23]
			abschlusstyp = row[24]

			aktabschnitt = []
			aktabschnitt.append(wdh)
			aktabschnitt.append(versetzt)
			aktabschnitt.append(abschluss)
			aktabschnitt.append(abschlusstyp)
			aktabschnitt.append(fehlstunden)
			aktabschnitt.append(unentschuldigt)
			aktabschnitt.append(ajahrgang)
			aktabschnitt.append(wertung)

			alleabschnitte[aktuell+str(aschuljahr)+str(ahalbjahr)] = aktabschnitt

	return alleklassen, klassenschueler, allekurse, alleabschnitte, epochen