<?php
	define('_VALID_PHP', true);
	header('Content-Type: text/html; charset=utf-8');

	require('init.php');
	require_once __DIR__ . '/vendor/autoload.php';
	use Ramsey\Uuid\Uuid;

	$numero = get('numero_nota');
	$serie = get('serie_nota');
	$numero_nota = $numero.'-'.$serie;
	$id_empresa = (get('id_empresa')) ? get('id_empresa') : session('idempresa');
	$id_venda = getValue("id", "vendas", "numero_nota='$numero_nota'");
	$id_venda = ($id_venda) ? $id_venda : 0;
    $row_empresa = Core::getRowById("empresa", $id_empresa);
    $cnpj_emissor = $row_empresa->cnpj;
    $row_venda = ($id_venda) ? Core::getRowById("vendas", $id_venda) : 0;

	if (!empty($row_venda->uuid)) {
		$uuid_venda = $row_venda->uuid;
	} else {
		$uuid_venda = Uuid::uuid4();
		$data = array(
			'uuid' => $uuid_venda,
		);
		$db->update("vendas", $data, "id=" . $id);
	}

	if ($core->emissor_producao) {
		$ambiente = 'producao'; //'Producao' ou 'Homologacao'
		$idExterno = ($row_empresa->versao_emissao==0) ? 'nfce-'.$id_venda : 'nfce'.$row_empresa->versao_emissao.'-'.$id_venda;
	} else {
		echo "</br>--- --- --- --- AMBIENTE DE HOMOLOGAÇÃO --- --- --- ---</br>";
		$ambiente = 'homologacao'; //'Producao' ou 'Homologacao'
		$idExterno = ($row_empresa->versao_emissao==0) ? 'Hnfce-'.$id_venda : 'Hnfce'.$row_empresa->versao_emissao.'-'.$id_venda;
	}

	if ($row_venda){
		if($row_venda->numero && $row_venda->status_enotas=='Negada') {
			$consultaInutilizacao = $cadastro->getConsultarNFC($cnpj_emissor,$idExterno);
			$dados_emissao = $consultaInutilizacao['data'];
			$estado_emissao = $dados_emissao['estado_emissao'];
			$links = $dados_emissao['links'];

			if ($consultaInutilizacao && $estado_emissao == 'inutilizado') {
				$data_venda = array(
					'fiscal' => 2,
					'observacao' => sanitize('QUEBRA NA SEQUENCIA DA NUMERACAO'),
					'status_enotas' => 'Inutilizada',
					'motivo_status' => sanitize('QUEBRA NA SEQUENCIA DA NUMERACAO'),
					'link_xml_inutilizacao' => $links['xml_inutilizacao'],
					'usuario' => session('nomeusuario'),
					'data' => "NOW()"
				);
				$db->update("vendas", $data_venda, "id=" . $id_venda);

				//Sucesso. Numeração inutilizada
				echo "<br><br>---------------------------------<br>";
				echo lang('NOTA_INUTILIZADAS_OK');
				echo "<br>---------------------------------<br><br>";
			} else {
				$nota_inutilizar = array(
					'serie' => $serie,
					'numero' => $numero,
				);
				echo "SOLICITAR INUTILIZAR NUMERAÇÃO: ".$numero_nota;

				$retorno = getInutilizarNFC($cnpj_emissor, $nota_inutilizar, $uuid_venda);
				if ($retorno['sucesso']){
					$dados_emissao = $retorno['data'];
					$links = $dados_emissao['links'];

					$data_venda = array(
						'fiscal' => 2,
						'observacao' => sanitize('QUEBRA NA SEQUENCIA DA NUMERACAO'),
						'status_enotas' => 'Inutilizada',
						'motivo_status' => sanitize('QUEBRA NA SEQUENCIA DA NUMERACAO'),
						'link_xml_inutilizacao' => $dados_emissao['link_xml_inutilizacao'],
						'usuario' => session('nomeusuario'),
						'data' => "NOW()"
					);
					$db->update("vendas", $data_venda, "id=" . $id_venda);
					//Sucesso. Numeração inutilizada
					echo "<br><br>---------------------------------<br>";
					echo lang('NOTA_INUTILIZADAS_OK');
					echo "<br>---------------------------------<br><br>";
				} else {
					$mensagens = [];

					foreach ($retorno['errors'] as $campo => $errosDoCampo) {
						$campoFormatado = $mapaCampos[$campo] ?? strtoupper($campo);
						// Caso o valor seja string com aspas extras e unicode, decodifica
						if (is_string($errosDoCampo)) {
							// Exemplo: "\"Mensagem com unicode\""
							$mensagem = json_decode($errosDoCampo); // remove aspas e unicode
							// fallback caso json_decode falhe
							if ($mensagem === null) {
								$mensagem = $errosDoCampo;
							}
						} elseif (is_array($errosDoCampo)) {
								// Junta erros de array normalmente
								$mensagem = implode(' | ', $errosDoCampo);
						} else {
							$mensagem = (string)$errosDoCampo;
						}
						$mensagens[] = $campoFormatado . ': ' . $mensagem;
					}
					//inultilização não autorizada.
					echo "<br><br>---------------------------------<br>";
					echo lang('NOTA_INUTILIZADAS_NAO');
					echo "<br>";
					echo lang('STATUS').': '.$retorno['message'];
					echo "<br>";
					echo lang('MOTIVO').': ' .implode(' | ', $mensagens);
					echo "<br>---------------------------------<br><br>";

					$data = array(
						'uuid' => Uuid::uuid4(),
						'usuario' => session('nomeusuario'),
						'data' => "NOW()"
					);
					$db->update("vendas", $data, "id=" . $id_venda);
				}
			}
		} else {
			echo "<br><br>---------------------------------<br>";
			echo lang('NOTA_INUTILIZADAS_AVISO');
			echo "<br>---------------------------------<br><br>";
		}
	} else {
		echo "<br><br>---------------------------------<br>";
		echo lang('NOTA_INUTILIZADAS_AVISO');
		echo "<br>---------------------------------<br><br>";
	}

	function getInutilizarNFC($cnpj_emissor, $nota_inutilizar, $uuid_venda)
	{
		$curl = curl_init();
		$url = "https://fiscal.sigesis.com.br/api/v1/nfce/inutilizar";

		curl_setopt_array($curl, array(
			CURLOPT_URL => $url,
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => "POST",
			CURLOPT_HTTPHEADER => array(
				"Content-Type: application/json",
				"Accept: application/json",
				"X-CNPJ:".$cnpj_emissor,
				"X-Idempotency-Key: " . $uuid_venda,

			),
			CURLOPT_POSTFIELDS => json_encode($nota_inutilizar),
		));
		$response = curl_exec($curl);

		curl_close($curl);
		return json_decode($response, true);
	}
?>