#encoding: utf-8

import win32print
from pprint import pprint

class Imprimir:
	def __init__(self):
		pass

	def __carregar_modelo(self, modelo, **params):
		arq = open(modelo, "r")
		str = arq.read()
		str = str.format(**params)
		str = str.replace("\r", "").replace("\n", "\r\n")
		return str

	def __imprimir(self, dados):
		# na duvida deixo a impressora default como None
		printer_name = None
		# buscando a impressora ARGOX
		impressoras = win32print.EnumPrinters(win32print.PRINTER_ENUM_LOCAL)
		for impressora in impressoras:
			if impressora[1].find("Argox") != -1:
				printer_name = impressora[1].split(",")[0]
				break

		if printer_name == None:
			print "Nenhuma impressora ArgoX foi encontrada. Processo cancelado."
			return False

		print "Gerando impressao em:\n{}".format(printer_name)

		resultado = False

		hPrinter = win32print.OpenPrinter(printer_name)
		try:
			hJob = win32print.StartDocPrinter (hPrinter, 1, ("ImpressaoEtiquetas", None, "RAW"))
			try:
				win32print.StartPagePrinter (hPrinter)
				win32print.WritePrinter (hPrinter, dados)
				win32print.EndPagePrinter (hPrinter)
				resultado = True
			finally:
				win32print.EndDocPrinter (hPrinter)
		finally:
				win32print.ClosePrinter (hPrinter)

		return resultado


	def executar(self, modelo_etiqueta, dados_impressao):
		dados = self.__carregar_modelo(modelo_etiqueta, DADOS_IMPRESSAO = dados_impressao)
		return self.__imprimir(dados)

