#!C:/Users/administrator.AUTDOM01/AppData/Local/Programs/Python/Python36-32/python.exe

# Print All Files in Folder C:\web\veldb\vimsreports
import sys
import os
import time 
import mysql.connector
from os import path  
from os import listdir  
from os.path import isfile, join
import shutil  
import win32api  
import win32print 

import default_setting

def file_print(cnx,frompath):
	printok = 0
# split dir & filename
	path, fileName = os.path.split(frompath)
# list all the files in Report folder  
	files = [ f for f in listdir(path) if isfile(join(path,f)) ]  
	e = 0 
# Loop Through Files	
	for file in files:
# get print mapping based on file name
		reference = file[0:5]
		printer = print_map(cnx,reference)
# Archive Folder
		reportpath = path+"_arcv/"+printer
		if not os.path.isdir(reportpath):
			os.makedirs(reportpath)
# try to print file from original folder
		try:
			printok = 0
# Use Default Program based on file extension		
#			win32print.SetDefaultPrinter(printer)
			printok = win_print(path+'/'+file,printer)
# Move Report to Archive Folder
			if (path != reportpath):
				try:
					shutil.copyfile(path+'/'+file, reportpath+'/'+file)
				except:
					pass
			time.sleep(1)		
			try:
				os.remove(path+'/'+file)
			except:
				pass
		except:
			print("Error Printing ",path+'/'+file," ",printer)
			printok = 0
			for x in range(10):
				try:
#					win32print.SetDefaultPrinter(printer)
					printok = win_print(path+'/'+file,printer)
					break
				except Exception as Err:
					print("Error "+str(Err))
					pass
			pass
			
		print ("Print Status = "+str(printok))
			
		if (printok == 0):
			try:	
# print file from archive folder
# Use Default Program based on file extension		
#				win32print.SetDefaultPrinter(printer)
				printok = win_print(reportpath+'/'+file,printer)
			except:
				pass
				
			print ("Print Status = "+str(printok))

# Clean-up variables
#	time.sleep(1)
	try:
		del files  
		del reportpath
	except:
		pass

def win_print(filename, printer = None):
	printok = 0
	try:
# Kill any open Adobe Windows
		try:
			print("AcroRD32 - pre-print")
			os.system("TASKKILL /F /IM AcroRD32.exe")
#			time.sleep(10)
		except:
#			time.sleep(5)
			pass
		
		try:
#		if not printer:
#			printer = win32print.GetDefaultPrinter()
			
#		win32print.SetDefaultPrinter(printer)	

# print using default program		
			out = '/d:"%s"' % (printer)
			win32api.ShellExecute(0, "print", filename, out, ".", 0)
			printok = 1
			print("OK  -win_print",filename," ",printer)
		except Exception as Err:
			printok = 0
			print("FAIL-win_print",filename," Error ",Err)
			pass
		
# wait before killing the default program - give the print program time to complete		
#		time.sleep(15)
	
# Kill any Adobe Windows		
#		try:
#			print("AcroRD32 - post-print")
#			os.system("TASKKILL /F /IM AcroRD32.exe")
#		except:
#			time.sleep(5)
#			pass
		
		return printok
	except Exception as Err:
		print ("FAIL-win_print"+str(Err))

def print_map(cnx,reference):
	printerName = "default"
	try:
#		printerName = win32print.GetDefaultPrinter()
# connection
		cursor = cnx.cursor(dictionary=True)
# Get printer mpped to this reference	
		dataQuery = "SELECT printer_address AS printer_address FROM printer_mapping WHERE printer_code='"+reference+"' LIMIT 1"
		cursor.execute(dataQuery) 
		row = cursor.fetchone()
		if row:
			printerName = row['printer_address']
		cursor.close()
		return printerName
	except Exception as Err:
		print ("FAIL-"+str(Err))
		return ("FAIL-"+str(Err))
	

def main(printfile):
	try:
# Default Connection / System Settings
		defaults = default_setting.defaultSettings()
# mySql Connector
		cnx = mysql.connector.connect(user=defaults['dbuser'], password=defaults['dbpwd'],host=defaults['dbhost'],database=defaults['dbase'])
# List Available Printer Names	
#	for printers in win32print.EnumPrinters(2):
#		print("Printer: ",printers[2])
# Set path to report files folder	
#	frompath = r"c:\web\veldb\vimsreports" 
#	default_printer= win32print.GetDefaultPrinter()
#	printer= win32print.GetDefaultPrinter()
# Print & Archive Reports
		file_print(cnx,printfile)
# Restore Default Printer Setting
#	win32print.SetDefaultPrinter(default_printer)
	except Exception as Err:
		print ("FAIL-"+str(Err))
	
if __name__ == '__main__':
#	while True:
#		sys.stdout.write("\r")
#		main()
#		for remaining in range(60, 0, -1):
#			sys.stdout.write("\r")
#			sys.stdout.write("{:2d} seconds remaining.".format(remaining))
#			sys.stdout.flush()
#			time.sleep(1)

# Split file name & printer from input parm
	arg = sys.argv[1]
	parm1 = arg

# Set path to report files folder
	if (parm1 == "" or parm1 == None):
		parm1 = r"c:\web\veldb\vimsreports"	
		
# Store Default Printer name
	default_printer = "default"
	try:
		default_printer= win32print.GetDefaultPrinter()
	except Exception as Err:
		print ("FAIL-main1"+str(Err))
		pass
		
	main(parm1)
	
# Restore Default Printer Setting
	if default_printer != "default":
		try:
			win32print.SetDefaultPrinter(default_printer)
		except Exception as Err:
			print ("FAIL-main2"+str(Err))
			pass
	
	print ("Python-"+str(parm1))