<?php
// require __DIR__ . '/ticket/autoload.php'; //Nota: si renombraste la carpeta a algo diferente de "ticket" cambia el nombre en esta línea

require 'plugins/escpos/autoload.php';

use Mike42\Escpos\Printer;
use Mike42\Escpos\EscposImage;
use Mike42\Escpos\PrintConnectors\WindowsPrintConnector;
use Mike42\Escpos\CapabilityProfile;
use Mike42\Escpos\CapabilityProfiles\StarCapabilityProfile;

// require __DIR__.'/monedas_a_letras.php';
// require 'controller/monedas_a_letras.php';
/*
Ejemplo para generar encabezados
*/


/*
	Aquí, en lugar de "POS-58" (que es el nombre de mi impresora)
	escribe el nombre de la tuya. Recuerda que debes compartirla
	desde el panel de control
*/

// $nombre_impresora = "POS-58"; 
	// $nombre_impresora = "EPSON TM-T88V Receipt5";
	// $nombre_impresora = "smb://10.10.80.152/EPSON TM-U220 Receipt";
	// $nombre_impresora = "smb://10.10.80.4/CE_B_ticketera_12";
	$nombre_impresora = $nombreTicketera;
	// $nombre_impresora = 'smb://6-LPTDITI01/EPSON TM-U220 Receipt';
	// $nombre_impresora = 'smb://6-LPTDITI01/EPSMU220PAUSB';
	// if ($impresionDePrueba == 'true') {
	// 	$nombre_impresora = "EPSON TM-T88V_UDESI";
	// } else {
	// 	$nombre_impresora = $nombre_impresora;
	// }
	


	$connector = new WindowsPrintConnector($nombre_impresora);

	$profile = StarCapabilityProfile::getInstance();
	$printer = new Printer($connector, $profile);	

	/* Initialize */
	$printer -> initialize();

	/* Font modes */
	$modes = array(
		Printer::MODE_FONT_B,
		Printer::MODE_EMPHASIZED,
		Printer::MODE_DOUBLE_HEIGHT,
		Printer::MODE_DOUBLE_WIDTH,
		Printer::MODE_UNDERLINE);

	$justification = array(
		Printer::JUSTIFY_LEFT,
		Printer::JUSTIFY_CENTER,
		Printer::JUSTIFY_RIGHT);

	$mode |= $modes[6];

	$printer -> selectPrintMode($mode);

/*
	Vamos a imprimir un logotipo
	opcional. Recuerda que esto
	no funcionará en todas las
	impresoras

	Pequeña nota: Es recomendable que la imagen no sea
	transparente (aunque sea png hay que quitar el canal alfa)
	y que tenga una resolución baja. En mi caso
	la imagen que uso es de 250 x 250
*/

# Vamos a alinear al centro lo próximo que imprimamos
// $printer->setJustification(Printer::JUSTIFY_CENTER);

	/* Underline */
	// $printer -> setUnderline(1); // LineaSuave
	/* Emphasis */
 	// $fonts = array(Printer::FONT_A, Printer::FONT_B, Printer::FONT_C);
 	//To reduce the left margin
	$connector->write(Printer::GS.'L'.chr(0).chr(0));

function addSpaces($string = '', $valid_string_length = 0) {

    if (strlen($string) < $valid_string_length) {
        $spaces = $valid_string_length - strlen($string);
        for ($index1 = 1; $index1 <= $spaces; $index1++) {
            $string = $string . ' ';
        }
    }

    return $string;
}

 	$printer->setFont(Printer::FONT_B);
	// $printer -> setEmphasis(true); // CON ENFASIS
	//TEXTO A IMPRIMIR
	$printer -> setTextSize(1, 1);
	$printer -> setJustification(Printer::JUSTIFY_CENTER); // centrado
//To reduce the left margin
// $connector->write(Printer::GS.'L'.chr(0).chr(0));

// $printer -> text("After reducing the left margin.\n");
// $printer -> text("PHP receipt printer library for use with ESC/POS-compatible thermal and impact printers.\n");

// $printer -> text("   \n");
/*
	Intentaremos cargar e imprimir
	el logo
*/
	// DESCOMENTAR LUEGO
	try{
		$logo = EscposImage::load("img/logo_hrl_ticket.png");
		$printer->bitImage($logo);
	}catch(Exception $e){/*No hacemos nada si hay error*/}

	$printer -> text("HOSP. REGIONAL LAMBAYEQUE A SUNAT 0071845104542 \n");
	$printer -> text("Via de evitamiento norte con av. el prog\n");
	// $printer->text("Prog Augusto B Leguia Nº100 (Esq. av Progreso\n)");
	$printer -> text("RUC: 20487911586     Telef: 074-480420 \n");
	$printer->setFont(Printer::FONT_A);
	$printer -> setEmphasis(true);
	$printer -> text("FARMACIA");
	$printer -> text("\n ".$titulo_ticket." \n\n");
	$printer->setFont(Printer::FONT_B);
	$printer -> setEmphasis(false);
	// // $printer -> text("Nº B007-000609 \n");
	// // $printer -> text("Nº ".$letra.$nroserie."-".$nrodocumento." \n");
	// $printer -> text("-----------------\n");
	// // $printer -> setJustification(Printer::JUSTIFY_LEFT); // centrado
	// list($fechaAtencion, $horaAtencion) = explode(' ', $oatencionCE->CitaFechaAtencion);

	// $fechaAtencion = date("d/m/Y", strtotime($fechaAtencion));
	// list($horaAtencion) = explode('.', $horaAtencion);

	// $printer->text("Fecha Atencion: ".$fechaAtencion."   Hora: ".$horaAtencion."\n"); //corresponde a cita 

	// // $printer -> text("Sr(a): SALAZAR NEPOMUCENO ALAYO KARLA \n");
	$printer -> text("Sr(a): {$nombrepaciente} \n");
	// if ($tipocomprobante == '2') {
		// $printer -> text("DNI: ".$oatencion->NroDocumento." \n");
		$printer -> text("DNI:  {$nrodocumento}      "."EDAD: ".$Edad." \n");
	// } 	

	$printer->text("Nº Historia: ".$NroHistoriaClinica."   Nº cuenta: ".$IdCuentaAtencion."\n"); //corresponde a cita 
	// // $printer->selectPrintMode();
	$printer->text("Ubicación: ".$ubicacion. "\n");
	$printer->text("Cama Nº: ".$cama. "\n");

	// $printer->text("Procedencia: ".$nombreServicio."\n"); //corresponde a cita 

	$printer -> text(" \n");

	//INICIAR LOOP CIE-X
	$printer -> setJustification(Printer::JUSTIFY_CENTER); //izquierda
	$printer->setEmphasis(true);
	// $printer -> text("DIAGNOSTICOS \n");
	$printer -> text("==================== DIAGNOSTICOS ==================== \n");	
	// foreach ($lDiagnosticos as $dx) {

	// 	$new_cadenadx = limpiarTexto(rtrim($dx->CodigoCIE2004)); 
		
	// 	$texto_binariodx = $ordenesMedicas->convertirABinario($new_cadenadx);
	// 	$convertidodx = utf8_decode(hex2bin($texto_binariodx));
	// 	$printer->setEmphasis(false);
	// 	$printer->text(strtoupper('CIE-10: '.$convertidodx.'-'.$dx->Descripcion)."\n");		
	// }

	//// ************* DX PARA HOSPITALIZACION ***********
	foreach ($lciexIngreso as $dx) {

		// $new_cadenadx = limpiarTexto(rtrim($dx->CodigoCIE2004)); 
		
		// $texto_binariodx = $ordenesMedicas->convertirABinario($new_cadenadx);
		// $convertidodx = utf8_decode(hex2bin($texto_binariodx));
		$printer->setEmphasis(false);
		$printer->text(strtoupper('CIE-10: '.$dx->codigo_ciex.'-'.$dx->descripcion_ciex)."\n");		
	}
	//FINALIZAR LOOP CIE-X


	$printer -> text("======================================================= \n");
	$printer -> setJustification(Printer::JUSTIFY_LEFT); //izquierda
	// // $printer -> setJustification(); // Reset
	$printer -> setEmphasis(true);	
	// DESCOMENTAR LUEGO
	// $printer ->setJustification(Printer::JUSTIFY_CENTER); //izquierda
	$printer->text(addSpaces('CODIGO', 10).addSpaces('MEDICAMENTO', 40).addSpaces('CANT.', 6). "\n");
	$printer ->text("--------------------------------------------------------\n");
	$printer->setEmphasis(false);




	//INICIAR LOOP
	$printer -> setJustification(Printer::JUSTIFY_LEFT); // centrado
	foreach ($detalleReceta as $detalle) {
		// $n_item = substr('LIMPIEZA QUIRURGICA DE HERIDAS ESCROTO', 0, 25);
		// $descripcion_limpia = normaliza(rtrim($det->NombreProducto));

		$Codigo = str_pad($detalle->Codigo, 10, " ", STR_PAD_RIGHT); //completa a la DERECHA la cadena

		// $printer->text(addSpaces($Codigo, 10));

		// $new_cadena = limpiarTexto(rtrim($detalle->Nombre)); //se quitan los espacios en blanco al final(rtrim) y se quitan los caracteres especiales
		
		// $texto_binario = $ordenesMedicas->convertirABinario($new_cadena);

		// $convertido = utf8_decode(hex2bin($texto_binario));

		// $texto_limpio = str_replace ( '?' , ' ' , $convertido);
		$texto_limpio = $detalle->Nombre;
		$prev_Nombre = substr(strtoupper($texto_limpio), 0, 35);
		$n_NombreMedInsumo = str_pad($prev_Nombre, 35, " ", STR_PAD_RIGHT); //completa a la izquirda la cadena

		// // $importe = substr ($det->Importe, 0, -2);//elimina los ultimos digitos decimales
		// // $importe = str_pad($prev_importe, 8, " ", STR_PAD_LEFT); //completa a la izquirda la cadena
		// // $printer->text(addSpaces($n_item, 26).addSpaces(' 1', 6). addSpaces('10000.00', 7) . "\n");

		// // $cantidad = str_pad($det->Cantidad, 6, " ", STR_PAD_LEFT); //completa a la izquirda la cadena
		$cantidad = str_pad($detalle->CantidadPedida, 6, " ", STR_PAD_RIGHT); //completa a la DERECHA la cadena


		$printer->text(addSpaces($Codigo, 10).addSpaces($n_NombreMedInsumo, 40).addSpaces($cantidad, 6));

		// $printer -> setJustification(Printer::JUSTIFY_RIGHT); // derechaszz
		
		
		// list($imp_entero, $imp_decimal) = explode('.', $det->totalPorPagar);//se generan un impuesta entero y decimal.

		// $c_decimales = strlen($imp_decimal); //se verifica cuantos decimales tiene importe

		// if ($c_decimales >2) {
		// 	$imp_decimal = substr ($imp_decimal, 0, -2);//elimina los ultimos digitos decimales
		// }

		// $importe = str_pad($imp_entero.'.'.$imp_decimal, 8, " ", STR_PAD_LEFT); //completa a la izquirda la cadena

		// $printer->text(addSpaces($importe, 7) . "\n");

		// $printer -> setJustification(Printer::JUSTIFY_LEFT);
	}



	//TERMINAR LOOP
	
	// $printer -> text("________________________________________________________\n");
	// $printer ->text("--------------------------------------------------------\n");
	$printer -> text(" \n");
	
	// $printer -> setJustification(Printer::JUSTIFY_RIGHT); // derecha


	// // $printer->text(addSpaces('', 20).addSpaces('Inafecto', 12). addSpaces('10000.00', 7) . "\n");
	// $sub_total_importe = str_pad($sub_total_importe, 7, " ", STR_PAD_LEFT);

	// $printer->text(addSpaces('', 20).addSpaces('Sub Total', 12). addSpaces($sub_total_importe, 7) . "\n");
	// // $printer->text(addSpaces('', 20).addSpaces('Exonerado', 12). addSpaces('10000.00', 7) . "\n");

	// // $new_total_exoneraciones = str_pad($total_exoneraciones, 7, " ", STR_PAD_LEFT);

	// // $printer->text(addSpaces('', 20).addSpaces('Exonerado', 12). addSpaces($new_total_exoneraciones, 7) . "\n");


	// // $printer->text(addSpaces('', 20).addSpaces('IGV', 12). addSpaces('10000.00', 7) . "\n");
	// // $printer->text(addSpaces('', 20).addSpaces('Afecto', 12). addSpaces('    0.00', 7) . "\n"); // como maximo son 2 espacios mas al numr inidicado
	// $new_total_afecto = str_pad($total_afecto, 7, " ", STR_PAD_LEFT);
	// $printer->text(addSpaces('', 20).addSpaces('Afecto', 12). addSpaces($new_total_afecto, 7) . "\n"); // como maximo son 2 espacios mas al numr inidicado

	// $new_total_igv = str_pad($total_igv, 7, " ", STR_PAD_LEFT);
	// $printer->text(addSpaces('', 20).addSpaces('IGV', 12). addSpaces($new_total_igv, 7) . "\n");

	// $printer -> text("________________________________________\n");
	// $printer -> setJustification(Printer::JUSTIFY_LEFT); //izquierda
	// $printer->setEmphasis(true);
	// $new_total_importe = str_pad($total_importe, 8, " ", STR_PAD_LEFT);	
	// $printer->text(addSpaces('', 18).addSpaces('TOTAL A PAGAR', 6). addSpaces($new_total_importe, 7) . "\n");


	// $printer->setEmphasis(false);
	// // $textos = num2letras($total_importe);

	// // $printer -> text('Son: '.$textos."\n");

	// $printer -> text("Caja: ".strtoupper($nombreCaja)." \n");
	$printer->setEmphasis(true);
	$printer -> text("===================== TRATAMIENTO ===================== \n");	
	$printer -> setJustification(Printer::JUSTIFY_LEFT); //izquierda
	// // $printer -> setJustification(); // Reset
	// // $printer -> setEmphasis(true);	
	// DESCOMENTAR LUEGO
	// $printer ->setJustification(Printer::JUSTIFY_CENTER); //izquierda
	// $printer->text(addSpaces('CODIGO', 10).addSpaces('MEDICAMENTO', 40).addSpaces('CANT.', 6). "\n");
	// $printer ->text("--------------------------------------------------------\n");
	
	$nro = 1;

	//INICIAR LOOP
	$printer -> setJustification(Printer::JUSTIFY_LEFT); // centrado
	foreach ($detalleReceta as $detalle) {
		// $n_item = substr('LIMPIEZA QUIRURGICA DE HERIDAS ESCROTO', 0, 25);
		// $descripcion_limpia = normaliza(rtrim($det->NombreProducto));

		$Codigo = str_pad($detalle->Codigo, 10, " ", STR_PAD_RIGHT); //completa a la DERECHA la cadena

		// $printer->text(addSpaces($Codigo, 10));

		// $new_cadena = limpiarTexto(rtrim($detalle->Nombre)); //se quitan los espacios en blanco al final(rtrim) y se quitan los caracteres especiales
		
		// $texto_binario = $ordenesMedicas->convertirABinario($new_cadena);

		// $convertido = utf8_decode(hex2bin($texto_binario));

		// $texto_limpio = str_replace ( '?' , ' ' , $convertido);
		// $texto_limpio = str_replace ( '  ' , ' ' , $texto_limpio);
		$texto_limpio = $detalle->Nombre;
		// $prev_Nombre = substr(strtoupper($texto_limpio), 0, 35);
		// $n_NombreMedInsumo = str_pad($prev_Nombre, 35, " ", STR_PAD_RIGHT); //completa a la izquirda la cadena

		// // // $cantidad = str_pad($det->Cantidad, 6, " ", STR_PAD_LEFT); //completa a la izquirda la cadena
		// $cantidad = str_pad($detalle->CantidadPedida, 6, " ", STR_PAD_RIGHT); //completa a la DERECHA la cadena


		// $printer->text(addSpaces($Codigo, 10).addSpaces($n_NombreMedInsumo, 40).addSpaces($cantidad, 6));
		$printer->setEmphasis(true);
		$printer->text(strtoupper($nro++ .'.'.$texto_limpio)."\n");
		$printer->setEmphasis(false);
		$printer->text(strtoupper('Dosis: '.$detalle->Dosis)."\n");
		$printer->text(strtoupper('Via: '.$detalle->ViaAdministracion)."\n");

		switch ($detalle->Frecuencia) {
			case "1":
			$printer->text(strtoupper('Frecuencia: C/ 2 Horas')."\n");
			break;
			case "2":
			$printer->text(strtoupper('Frecuencia: C/ 4 Horas')."\n");
			break;
			case "3":
			$printer->text(strtoupper('Frecuencia: C/ 6 Horas')."\n");
			break;
			case "4":
			$printer->text(strtoupper('Frecuencia: C/ 8 Horas')."\n");
			break;
			case "5":
			$printer->text(strtoupper('Frecuencia: C/ 12 Horas')."\n");
			break;
			case "6":
			$printer->text(strtoupper('Frecuencia: C/ 24 Horas')."\n");
			break;
			default:
			$printer->text(strtoupper('Frecuencia: ')."\n");
		}

		

	}



	//TERMINAR LOOP

	// $textIndicacionesSinEspacios = trim(php_strip_whitespace(strip_tags($oatencionCE->CitaTratamiento)));
	$textIndicacionesSinEspacios = trim(strip_tags($oatencionCE->CitaTratamiento));

	$cantidadTextIndicaciones = strlen($textIndicacionesSinEspacios);

	if ($cantidadTextIndicaciones > 0) {
		$printer ->text("---------------------\n");	
		$printer->setEmphasis(true);
		$printer->text(strtoupper('Indicaciones')."\n");	
		$printer->setEmphasis(false);
		$printer->text(strip_tags($oatencionCE->CitaTratamiento)."\n");	
		// $printer->text(strlen($textIndicacionesSinEspacios)."\n");	
	}


	// $printer -> text("________________________________________________________\n");
	$printer ->text("--------------------------------------------------------\n");

	$printer -> text("Méd. Prescriptor: ".strtoupper($nombreMedico)." \n");
	// // $printer->text("Caja: ".strtoupper($nombreCaja)."\n); Cajero: ".strtoupper($iniciales_cajero)."\n"); //corresponde a cita 
	$printer->text("Fecha y Hora Imp: ".date("d-m-Y")." ".date("H:i:s")."\n"); //corresponde a cita 

	// $printer -> text("Consulte la validez del comprobante en\nhttp://www.sunat.gob.pe/ol-ti-itconsvalicpe/ConsValiCpe.htm\n");

// foreach(array(4, 8, 16, 32, 64, 128, 255) as $spacing) {
//     $printer -> setLineSpacing($spacing);
//     $printer -> text("Spacing $spacing: The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n");
// }
	// $printer -> setLineSpacing(32);
	// $printer -> text("Spacing $spacing: The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.\n");


/*
	Podemos poner también un pie de página
*/
	// $printer->text("Muchas gracias por su compra\nparzibyte.me");



	/*Alimentamos el papel 3 veces*/
	$printer->feed(3);

/*
	Cortamos el papel. Si nuestra impresora
	no tiene soporte para ello, no generará
	ningún error
*/
	$printer->cut();

/*
	Por medio de la impresora mandamos un pulso.
	Esto es útil cuando la tenemos conectada
	por ejemplo a un cajón
*/
	$printer->pulse();

/*
	Para imprimir realmente, tenemos que "cerrar"
	la conexión con la impresora. Recuerda incluir esto al final de todos los archivos
*/
	$printer->close();
	?>