<?php
if (isset($TipoFactura)) {
    $factur = $GLOBALS["facturaBodega"];

    $connn = new conexion();
    $conectar = $connn->conectar();



$query = "SELECT `tipoId`, `cedula`, `Nombre`,
`direccion`, `telefono`, `apellido`, `correo`,
  `dv`, `naturaleza`,
 `regimen`, `responsabilidad`, `codigociudad`,`ResoluPosElec`, `PrefijoPosE`, `userApi`, `passApi`,
 facturas.factura, `valor`, `fechaFactura`,  `F.Pago_Electro`, `Fecha_Venci_Electro`, `M.Pago_Electro`,nit,detallef,bodegaEm
    FROM `facturas`
    INNER JOIN empresa ON facturas.idbodegaF = empresa.bodegaEm
    INNER JOIN clientes ON facturas.cliente = clientes.cedula 
    WHERE tipoFactura='Electronica' AND EstadoEjecucion='0' AND cufe='0' AND facturas.devolucion='0'  AND Pos_Electronico='1' AND facturas.factura='$factur'
    LIMIT 1";

    $resultado = $conectar->query($query);
} else {


$query = "SELECT `tipoId`, `cedula`, `Nombre`,
`direccion`, `telefono`, `apellido`, `correo`,
  `dv`, `naturaleza`,
 `regimen`, `responsabilidad`, `codigociudad`,`ResoluPosElec`, `PrefijoPosE`, `userApi`, `passApi`,
 facturas.factura, `valor`, `fechaFactura`,  `F.Pago_Electro`, `Fecha_Venci_Electro`, `M.Pago_Electro`,nit,detallef,bodegaEm
    FROM `facturas`
    INNER JOIN empresa ON facturas.idbodegaF = empresa.bodegaEm
    INNER JOIN clientes ON facturas.cliente = clientes.cedula 
    WHERE tipoFactura='Electronica' AND EstadoEjecucion='0' AND cufe='0' AND facturas.devolucion='0'  AND Pos_Electronico='1' 
    LIMIT 1";

    $resultado = $conectar->query($query);
}

if($resultado->num_rows > 0 ){
// $fila = $resultado->fetch_all(MYSQLI_ASSOC);
$fila = $resultado->fetch_assoc();



$factur =$fila["factura"];
$bodega= $fila["bodegaEm"];

// $facturaEnvia = preg_replace('/\D/', '', $factur);
// $PREFIJO = preg_replace('/\d/', '', $factur);

// Extraer el prefijo (números iniciales seguidos de letras)
preg_match('/^(\d*[a-zA-Z]+)/', $factur, $prefixMatches);
$PREFIJO = isset($prefixMatches[1]) ? $prefixMatches[1] : '';

// Extraer la parte numérica después del prefijo
preg_match('/[a-zA-Z]+(\d+)$/', $factur, $matches);
$facturaEnvia = isset($matches[1]) ? $matches[1] : '';


$actulizarEstadoFac = "UPDATE facturas SET EstadoEjecucion = 1 WHERE factura = '$factur'";
$eje = $conectar->query($actulizarEstadoFac);

$productosQuery = "SELECT * FROM `ventas` INNER JOIN productos on ventas.codigoProducto=productos.codigo  WHERE factura='$factur'";
$resultado1 = $conectar->query($productosQuery);
$fila1 = $resultado1->fetch_all(MYSQLI_ASSOC);
$productos = [];


foreach ($fila1 as $key => $value) {
    $tipoProduct = $value["tipoProduct"];
    $precioVenta = $value["valor"];

    if (($tipoProduct == "hibrido" || $tipoProduct == "Fabricacion") && $precioVenta == 0) {
        
    }else{

    $caja = $value["cantCaja"];
    $frcc = $value["cantfrcc"];
    


    $precioUnita=$value["base"];
    if( $precioUnita==0){
        $precioUnita=$value["valor"];  
    }
    $cnatidad = (int)$caja + (int)$frcc;

    $tipoiva = $value["tipoiva"];
    $valorNombre = $value["nombre"];
  
    $costounitario = $precioUnita / $cnatidad;

    // $totalCostouni=$costounitario*$cnatidad;

    // $costounitarioo =round( $precioUnita / $cnatidad,3);


    // $costounitario =round( $costounitarioo);
    // $conTounitario[]=$costounitario;


    
    
    

    $tipo = "";
    $claseImpuesto = "";
    $iva = "";

    switch ($tipoiva) {
        case "19":
            $tipo = "IVA";
            $claseImpuesto = "PO";
            $iva = "19";
            break;
        case "5":
            $tipo = "IVA";
            $claseImpuesto = "PO";
            $iva = "5";
            break;
        case "0":
            $tipo = "EXE";
            $claseImpuesto = "PO";
            $iva = "0";
            break;
        case "1":
            $tipo = "EXC";
            $claseImpuesto = "PO";
            $iva = "0";
            break;
        case "8":
            $tipo = "INC";
            $claseImpuesto = "PO";
            $iva = "8";
            break;
    }

    $datos = [
        "codigo" => $value["codigoProducto"],
        "nombreItem" => $valorNombre,
        "precioBaseUnitario" => $costounitario,
        "cantidad" => $cnatidad,
        "observacion" => "",
        "unidad" => "94",
        "impuestos" => [
            [
                "tipo" => $tipo,
                "claseImpuesto" => $claseImpuesto,
                "tarifaTributo" => $iva
            ]

        ]
            ];

    $productos[] = $datos;


    }


}




$fechaap = date('Y-m-d');

$respFiscales = "";
switch ($fila["responsabilidad"]) {
    case "O-13":
        $respFiscales = "GRC";
        break;
    case "O-15":
        $respFiscales = "ART";
        break;
    case "O-23":
        $respFiscales = "RIV";
        break;
    case "O-47":
        $respFiscales = "RST";
        break;
    default:
        $respFiscales = "NOA";
}

$respTributarias = "";
switch ($fila["regimen"]) {
    case "NO_APLICA":
        $respTributarias = "NOA";
        break;
    case "IVA":
        $respTributarias = "IVA";
        break;
    case "INC":
        $respTributarias = "INC";
        break;
    default:
        $respTributarias = "IEC";
}

$natural = ($fila["naturaleza"] == "NATURALES") ? "NATURAL" : "JURIDICA";

$formaPago = $fila["F.Pago_Electro"];
$fechaVenci=$fila["Fecha_Venci_Electro"];
$dateObject = new DateTime($fechaVenci);
$formattedDate = $dateObject->format('Y-m-d'); 

// Fecha actual
$fechaActual = date('Y-m-d');

// Convertir ambas fechas a objetos DateTime
$fechaComparar = new DateTime($formattedDate);
$fechaHoy = new DateTime($fechaActual);

// Comparar las fechas
if ($fechaComparar < $fechaHoy) {
    $formattedDate =date('Y-m-d'); 

}
$facturaelectronica = [
    "nit" => $fila["nit"],
    "numeroResolucion" => $fila["ResoluPosElec"],
    "consecutivoDcto" => $facturaEnvia,
    "prefijoDcto" => $PREFIJO,
    "fechaVencimiento" =>$formattedDate ,
    "formaPago" => $formaPago,
    "mediosPago" => [$fila["M.Pago_Electro"]],
    "total" => $fila["valor"],
    "observacion" => $fila["detallef"],
    "cliente" => [
        "nombreRazonSocial" => "{$fila['Nombre']} {$fila['apellido']}",
        "tipoIdentificacion" => $fila["tipoId"],
        "numIdentificacion" => $fila["cedula"],
        "naturaleza" => $natural,
        "email" => $fila["correo"],
        "respFiscales" => $respFiscales,
        "respTributarias" => $respTributarias,
        "direccion" => $fila["direccion"],
        "ciudad" => $fila["codigociudad"],
        "telefono" => $fila["telefono"]
    ],
    "items" => $productos,
    "extensiones" => [
        "beneficiosComprador" => [
            "codigo" => $fila["tipoId"],
            "nombreApellido" => $fila["Nombre"],
            "puntos" => 0
        ],
        "puntoVenta" => [
            "placaCaja" => "00",
            "ubicacionCaja" => "LOCAL",
            "cajero" => "General",
            "tipoCaja" => "RAPIDA",
            "codigoVenta" => "001",
            "subTotal" => 0
        ]
    ]
];



// echo(var_dump($facturaelectronica));
// die();

try {

if(isset($_SESSION[$bodega]["toke"])){
    $token=$_SESSION[$bodega]["toke"];
    
}else {
    $userrApi = $fila["userApi"];
    $passApi = $fila["passApi"];

    //producion
  //  $url="https://csi.clarisa.co:8443/seguridad/rest/api/v1/login/"
    //pruebas
    //$url="https://pru.clarisacloud.com:8443/seguridad/rest/api/v1/login/";
   
    $url = "https://csi.clarisa.co:8443/seguridad/rest/api/v1/login/";

    $data = [
        'usuario' => $userrApi,
        'contrasenia' => $passApi
    ];

    $options = [
        'http' => [
            'header' => "Content-type: application/json",
            'method' => 'POST',
            'content' => json_encode($data)
        ]
        ];

    $context = stream_context_create($options);
    $response = @file_get_contents($url, false, $context);

 // Verificar si la respuesta es falsa
 if ($response === false) {
    // Obtener detalles del error
    $error = error_get_last();
    $errorMessage = $error['message'] ?? 'Error desconocido al realizar la solicitud';
    throw new Exception($errorMessage);
}

    $result = json_decode($response, true);
    $token = $result["data"]["token"];
    // $_SESSION["toke"] = $token;

    $_SESSION[$bodega]=[
        "toke" => $token
    ];

}
// produ=
//$url = "https://api.clarisa.co:8443/api/equivalente/rest/v1/de/pos/";
//pruebas
//$url="https://pru.clarisacloud.com:8443/api/equivalente/rest/v1/de/pos/";

$url = "https://api.clarisa.co:8443/api/equivalente/rest/v1/de/pos/";

$options = [
    'http' => [
        'header' => "Content-type: application/json\r\n" . "Authorization: $token",
        'method' => 'POST',
        'content' => json_encode($facturaelectronica)
    ]
    ];

$context = stream_context_create($options);


$response = @file_get_contents($url, false, $context);

if ($response === false) {
    // Obtener detalles del error
    $error = error_get_last();
    $errorMessage = $error['message'] ?? 'Error desconocido al realizar la solicitud';
    throw new Exception($errorMessage);
}

$resulta = json_decode($response, true);

if ($resulta["success"] == true || $resulta["success"] == "true") {
    $cufe = $resulta["data"]["informacionQR"]["CUDE"];
    if (strlen($cufe)==0) {
        $cufe=0;
    }

    $actulizarEstadoFac = "UPDATE facturas SET EstadoEjecucion = '1', cufe ='$cufe', mensajeProveTecno = 'Factura Creada Con exito' WHERE factura = '$factur'";
    $eje = $conectar->query($actulizarEstadoFac);



 /// Registro documento electrónico

//  $nit = $fila["nit"];
//  $nombre = $userrApi;
//  $age = date('Y', strtotime($fechaap));  // Extrae el año
//  $mes = date('m', strtotime($fechaap));  // Extrae el mes
 
//  $url = "https://gestion.posnube.xyz/api/electro/$nit/$nombre/$age/$mes";
 
//  // Inicializar cURL
//  $ch = curl_init($url);
 
//  // Configuración de la solicitud cURL
//  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Obtener la respuesta si es necesario (aunque no la usaremos)
//  curl_setopt($ch, CURLOPT_HTTPGET, true); // Especificar que es una solicitud GET
//  curl_setopt($ch, CURLOPT_FAILONERROR, false); // No detiene el script en caso de error
//  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Opcional: Ignorar problemas con certificados SSL
 
//  // Ejecutar la solicitud (sin necesidad de almacenar la respuesta)
//  curl_exec($ch);
 
//  // Cerrar la sesión cURL
//  curl_close($ch);
 
//  //fin registro documentos electrónicos


} else {
    if (isset($resulta["data"]["errores"][0]["errorMessage"])) {
        $erro = $resulta["data"]["errores"][0]["errorMessage"];
    } else {
        if (isset($resulta["data"]["errores"][0]["codError"])) {
            $erro = $resulta["data"]["errores"][0]["codError"];
        } else {
            $erro = "Validar En la plataform del provedor Tecnoloogico";
        }
    }

    // $costounitarioTexto = implode(", ", $conTounitario);
    // $er=$erro.$costounitarioTexto;

    $actulizarEstadoFac = "UPDATE facturas SET mensajeProveTecno = '$erro' WHERE factura = '$factur'";
    $eje = $conectar->query($actulizarEstadoFac);
}

} catch (Exception $e) {
    $errorMessage = date('Y-m-d H:i:s') . " " . $factur. " - Error: " . $e->getMessage() . " in " . $e->getFile() . " on line " . $e->getLine() . "\n";
    file_put_contents('mensajeError.txt', $errorMessage, FILE_APPEND);

}
}else{
    echo("sin datos");
}
?>