<?php
session_start();
//error_reporting(E_ALL);
require_once ("../config/Cado.php");
require_once ("../app/venta/cVenta.php");
$oVenta = new cVenta();
require_once ("../app/notacredito/cNotacredito.php");
$oNotacredito = new cNotacredito();
require_once ("../app/notadebito/cNotadebito.php");
$oNotadebito = new cNotadebito();
require_once("../app/guiaremision/cGuiaremision.php");
$oGuiaremision = new cGuiaremision();
date_default_timezone_set('America/Lima');
//ini_set('display_errors',1);
header('Content-Type: text/html; charset=UTF-8');
require('../libreriasphp/xmlseclibs/xmlseclibs.php');
use RobRichards\XMLSecLibs\XMLSecurityDSig;
use RobRichards\XMLSecLibs\XMLSecurityKey;
// Cargar el XML a firmar
$doc = new DOMDocument();
$doc->load($_POST['arc']);
// Crear un nuevo objeto de seguridad
$objDSig = new XMLSecurityDSig();
// Utilizar la canonización exclusiva de c14n
$objDSig->setCanonicalMethod(XMLSecurityDSig::EXC_C14N);
// Firmar con SHA-256
$objDSig->addReference(
    $doc,
    XMLSecurityDSig::SHA1,
    array('http://www.w3.org/2000/09/xmldsig#enveloped-signature'),
    array('force_uri' => true)
);
	//Crear una nueva clave de seguridad (privada)
	$objKey = new XMLSecurityKey(XMLSecurityKey::RSA_SHA1, array('type' => 'private'));
	$objKey->loadKey('../archivos_pem/private_key.pem', true);
	
	$objDSig->sign($objKey);
	// Agregue la clave pública asociada a la firma
	
	$objDSig->add509Cert(file_get_contents('../archivos_pem/public_key.pem'), true, false, array('subjectName' => true)); // array('issuerSerial' => true, 'subjectName' => true));
	$objDSig->appendSignature($doc->getElementsByTagName('ExtensionContent')->item(0));
$xml_nombre = $_POST['emp_ruc'].'-'.$_POST['tipcom'].'-'.$_POST['ven_numdoc'];
// Guardar el XML firmado
$doc->save('../docfirmado/'.$xml_nombre.'.xml');
chmod('../docfirmado/'.$xml_nombre.'.xml', 0777);
/* echo '<span style="color: #015B01; font-size: 15pt;">Factura firmada:</span>&nbsp;';
echo '<span style="color: #B21919; font-size: 15pt;">'.$xml_nombre.'.xml</span><br>';
 */
 
$filename = '../docfirmado/'.$xml_nombre.'.zip';
$urlxml = '../docfirmado/'.$xml_nombre.'.xml';
$zip = new ZipArchive();
if ($zip->open($filename, ZipArchive::CREATE)===TRUE) {
	$zip->addFile('../docfirmado/'.$xml_nombre.'.xml',$xml_nombre.'.xml');
    $zip->close();
	
$data['fil_name_zip'] = $filename;
$data['fil_name_xml'] = '../docfirmado/'.$xml_nombre.'.xml';
$data['filenom'] = $xml_nombre.'.zip';
}else {
$data['fil_name_zip'] = 'Error al crear zip';
}
///ACTUALIZAR CODIGOS DE FIRMAA
	
$xml = new DOMDocument();
$xml->preserveWhiteSpace = FALSE;
$xml->load($urlxml);
$k= $xml->getElementsByTagName("DigestValue");
foreach ($k as $node) {
   $DigVal =  $node->nodeValue;
}
$k= $xml->getElementsByTagName("SignatureValue");
foreach ($k as $node) {
   $SigVal=  $node->nodeValue;
}
$venid = $_POST['venid'];
if($_POST['tipcom']=='08'){
	$oNotadebito->act_firma($venid,$DigVal,$SigVal,$urlxml);
}else if($_POST['tipcom']=='07'){
	$oNotacredito->act_firma($venid,$DigVal,$SigVal,$urlxml);
}else if($_POST['tipcom']=='09'){
	$oGuiaremision->act_firma($venid,$DigVal,$SigVal,$urlxml);
}else{
	$oVenta->act_firma($venid,$DigVal,$SigVal,$urlxml);
}
$data['xml_nom'] = $xml_nombre;
echo json_encode($data);
?>