import os,sys,shutil


############################################################################################################
#   H E L P E R   F U N C T I O N S   ######################################################################
############################################################################################################

# SORTIERREIHENFOLGE der Versionen:
# 1. Nach Jahr absteigend  (2022 kommt vor 2021)
# 2. Nach einem ans Jahr angehängten Buchstaben von z-a  (2022g kommt vor 2022a kommt vor 2022)
# 3. Alphabetisch nach dem  (Bxxxxx_2022 kommt vor Kyyyy_2022)
def versionSortByYear(version):
	year=version[version.find('_')+1:]
	if len(year) == 4:
		return float(year)*1000+(1000-ord(version[0]))/1000
	if len(year) > 4:
		return float(year[:4])*1000+ord(year[4])+(999-ord(version[0]))/1000
	return -1
# Bei alternativen Versionen wird der alternative-tag entfernt und dann wie o.a. sortiert
def altVersionSortByYear(version):
	version=version[:version.rfind('_')]
	return versionSortByYear(version)



# VERSIONEN
# Verfügbare Versionen aus dem Verzeichnis auslesen
def getAllVersions(sourceDir):
	versions=list()
	folderContent = os.scandir(sourceDir)
	for iContent in folderContent:
		if iContent.is_file() and iContent.name[-4:] == '.pdf':
			versions.append(iContent.name[:-4])
	return versions
# Hauptversionen aus den verfügbaren Versionen extrahieren
def getMainVersions(versions):
	mainVersions=list()
	for iVersion in versions:
		if iVersion.count('_')==1:
			mainVersions.append(iVersion)
	mainVersions.sort(key=versionSortByYear, reverse=True)
	return mainVersions
# Alternative Versionen aus den verfügbaren Versionen extrahieren
def getAlternativeVersions(versions):
	alternativeVersions={}
	for iVersion in versions:
		if iVersion.count('_')>1:
			altType=iVersion[iVersion.rfind('_')+1:]
			if altType in alternativeVersions:
				alternativeVersions[altType].append(iVersion)
			else:
				alternativeVersions[altType]=[iVersion]
	for iKey in list(alternativeVersions.keys()):
		alternativeVersions[iKey].sort(key=altVersionSortByYear, reverse=True)
	return alternativeVersions
	

	
# ZUSATZINFORMATIONEN
# Zu Vorgängerdokumenten
def getCustomParentInfo(sourceDir):
	parentInfo=''
	if os.path.exists(sourceDir+'/Quellen/parent.info'):
		parentFile = open(sourceDir+'/Quellen/parent.info', 'r')
		parentInfo = parentFile.read()
		parentFile.close()
	return parentInfo
# Zur fortsetzung dieses Dokuments
def getContinueStatus(sourceDir):	
	continueStatus='Aktuelle'
	if os.path.exists(sourceDir+'/Quellen/continue.bool'):
		statusFile = open(sourceDir+'/Quellen/continue.bool', 'r')
		statusInfo = statusFile.read()
		statusFile.close()
		if statusInfo[:5] == 'False':
			continueStatus='Letzte'
	return continueStatus





############################################################################################################
#   M A I N   F U N C T I O N    (called from listDocTitles.py)   ##########################################
############################################################################################################

def go(sourceDir,onlineDir,subPage,faculty,chapter,fullIndexFile,currentIndexFile,section,docType,docTitle):

	#Verfügbare Versionen holen
	versions=getAllVersions(sourceDir)	
	print('                  Listing versions',versions)
	mainVersions=getMainVersions(versions) #List of strings
	alternativeVersions=getAlternativeVersions(versions) #Dictionary of lists of strings
	parentInfo=getCustomParentInfo(sourceDir) #Single String
	continueStatus=getContinueStatus(sourceDir) #String 'Aktuelle' vs. 'Letzte'
	
	
	# HAUPTVERSIONEN schreiben
	### Aktuelle, bzw. letzte, Hauptversion
	if mainVersions:
		shutil.copyfile(sourceDir+'/'+mainVersions[0]+'.pdf',onlineDir+'/'+mainVersions[0]+'.pdf')
		fullIndexFile.write('    &nbsp;&nbsp; '+continueStatus+' Version: <a href="/Documents/'+faculty+'/'+chapter+'/'+section+'/'+docType+'/'+docTitle+'/'+mainVersions[0]+'.pdf" target="_blank">'+mainVersions[0]+'</a><br>\n')
		currentIndexFile.write('<a href="/Documents/'+faculty+'/'+chapter+'/'+section+'/'+docType+'/'+docTitle+'/'+mainVersions[0]+'.pdf" target="_blank">'+mainVersions.pop(0)+'</a>')
	else:
		fullIndexFile.write('    &nbsp;&nbsp; Aktuelle Version nicht verfügbar<br>\n')
		currentIndexFile.write('(Aktuelle Version nicht verfügbar)')
	
	### Veraltete Hauptversionen (nur fullIndex)
	if len(mainVersions)>1:
		fullIndexFile.write('    &nbsp;&nbsp; Vorherige Versionen: ')
	elif len(mainVersions)==1:
		fullIndexFile.write('    &nbsp;&nbsp; Vorherige Version: ')
	while mainVersions:
		shutil.copyfile(sourceDir+'/'+mainVersions[0]+'.pdf',onlineDir+'/'+mainVersions[0]+'.pdf')
		fullIndexFile.write('<a href="/Documents/'+faculty+'/'+chapter+'/'+section+'/'+docType+'/'+docTitle+'/'+mainVersions[0]+'.pdf" target="_blank">'+mainVersions.pop(0)+'</a>')
		if mainVersions:
			fullIndexFile.write(' ; ')
		else:
			fullIndexFile.write('<br>\n')
	
	
	# ALTERNATIVE VERSIONEN schreiben (nur fullIndex)
	for iAlternative in list(alternativeVersions.keys()):
		alternativeVersions[iAlternative].sort(key=altVersionSortByYear, reverse=True)
		if len(alternativeVersions[iAlternative])>1:
			fullIndexFile.write('    &nbsp;&nbsp; Alternative Versionen ('+iAlternative+'): ')
		elif len(alternativeVersions[iAlternative])==1:
			fullIndexFile.write('    &nbsp;&nbsp; Alternative Version ('+iAlternative+'): ')

		while alternativeVersions[iAlternative]:
			shutil.copyfile(sourceDir+'/'+alternativeVersions[iAlternative][0]+'.pdf',onlineDir+'/'+alternativeVersions[iAlternative][0]+'.pdf')
			fullIndexFile.write('<a href="/Documents/'+faculty+'/'+chapter+'/'+section+'/'+docType+'/'+docTitle+'/'+alternativeVersions[iAlternative][0]+'.pdf" target="_blank">'+alternativeVersions[iAlternative].pop(0)+'</a>')
			if alternativeVersions[iAlternative]:
				fullIndexFile.write(' ; ')
			else:
				fullIndexFile.write('<br>\n')
				
				
	# LATEX QUELLDOKUMENT schreiben (nur fullIndex)
	if os.path.exists(sourceDir+'/Quellen/texSource.zip'):
		shutil.copyfile(sourceDir+'/Quellen/texSource.zip',onlineDir+'/texSource.zip')
		fullIndexFile.write('    &nbsp;&nbsp; Latex-Quellcode: <a href="/Documents/'+faculty+'/'+chapter+'/'+section+'/'+docType+'/'+docTitle+'/texSource.zip" target="_blank"> texSource.zip </a><br>\n')
		
	# WEITERE QUELLENINFO schreiben (nur fullIndex)
	if parentInfo != '':
		fullIndexFile.write('    &nbsp;&nbsp; Weitere Quelleninformation: '+parentInfo+'<br>\n')
	
	# WEITERE QUELLENINFO schreiben (nur fullIndex)	
	if continueStatus == 'Letzte':
		fullIndexFile.write('    &nbsp;&nbsp; <id style="color:#767676">(Zu diesem Dokument werden keine weiteren Überarbeitungen folgen)</id><br>\n')
		
	return
