<?php
require_once "./pdocontroller.php";
// Parámetros esperados
$id_encabezado = $_POST['idfactura'] ?? '';
$codempresa    = $_POST['codemp'] ?? '';
if (isset($_REQUEST['idfactura'])){$id_encabezado=$_REQUEST['idfactura'];}else{$id_encabezado="";}
if (isset($_REQUEST['codemp'])){$codempresa=$_REQUEST['codemp'];}else{$codempresa="";}


if (empty($id_encabezado) || empty($codempresa)) {
    echo json_encode(["error" => "Faltan datos"]);
    exit;
}


if(( $codempresa!='') && $codempresa!='DND' ){
        $DBclase="PDO".$codempresa;
}
$DBconex=new $DBclase;

$query = "SELECT carcmp.nriper, carcmp.nomper, actres.nrores, actres.preres, cardet.artcod, cardet.canart, cardet.nomdet as dspdcm, 
    cardet.vlrdcm, cardet.pordto, cardet.poriva, carcmp.codfte, cardet.pjefte, cardet.nrodud, cardet.artser, carcmp.vlrant, 
    carcmp.fchini, carcmp.numfel, carcmp.fchcmp, carcmp.fincmp, carcmp.nrorem, respfiscal.coddat as resfiscal,
    CASE WHEN carcmp.tpocmp = 1 THEN 'DEBITO' ELSE 'CREDITO' END AS fpgod,
    CASE WHEN carcmp.obscmp = '' THEN 'FE' ELSE carcmp.obscmp END AS obscmp,
    actper.emlper, actper.telper as telter, actper.tidper, actper.tipper, actper.resfis, actper.tipreg, 
    actper.codciu, actper.dirper as dirter, actper.paiper, actper.no1per, actper.ap1per 
FROM actres, carcmp, cardet, actper, respfiscal 
WHERE carcmp.Id = cardet.idfactura 
  AND actper.nriper = carcmp.nriper 
  AND carcmp.codfte = actres.codfte 
  AND carcmp.estado != 'Eliminado' 
  AND actper.resfis = respfiscal.codres 
  AND actres.estres != 'Inactiva' 
  AND carcmp.Id = :idfactura";

$parametros = [':idfactura' => $id_encabezado];
$datos = $DBconex->executeconsulta($query, $parametros);

try{
            //echo $query;
            //print_r($parametros);
                     
            $datos=$DBconex->executeconsulta($query,$parametros);
            //echo json_encode($datos);
            $tabadicional="";
            $sw=0;
            $gKey="";
            $mPgod="MUTUAL_AGREEMENT";
            $vAnt=0;
            if (is_array($datos) && count($datos) > 0) {
                $items = [];
                 $sw = 0;
                    
                foreach ($datos as $qdatos) {
                    if ($sw == 0) {
                        // Datos generales
                        $vAnt   = $qdatos["vlrant"];
                        $fQtai  = $qdatos["fchini"];
                        $preFe  = $qdatos["preres"];
                        $numfel = $qdatos["numfel"];
                        $cFactura = $preFe . $numfel;
                                 
                        // ➤ Aquí sigue la parte de ruta y ejecución

                        $DBclase = "PDOCONTROLLER";
                        $DBconex = new $DBclase;
                        $query = "select conedb,apifel,keyemp,keyfel,prvfel,noemail from licemp where conedb = :empresa ";
                        $parametros = [':empresa' => $codempresa];
                        $datosFe = $DBconex->executeconsulta($query, $parametros);
                    
                        if (!empty($datosFe)) {
                            $qLoc = $datosFe[0];
                            $gRutaApi = trim($qLoc['apifel']) . "?keyemp=" . trim($qLoc['keyfel']);
                            $gKey=trim($qLoc['keyemp']);
                            $noEmail=trim($qLoc['noemail']);
                            //echo "habili";
                                    
                        } else {
                            //aqui se debe mostrar solo pdf normal de factura
                            $gRutaApi = "";
                            echo "NO HABILITADO fe";
                            return;
                         }

                                $parametrosFe = [
                                    ':factura' => $cFactura,
                                    ':codemp'  => $codempresa,
                                    ':nombre'  => $qdatos["nomper"],
                                    ':email'   => !empty($qdatos["emlper"]) ? $qdatos["emlper"] : $noEmail,
                                    ':fecha'   => $qdatos["fchcmp"],
                                    ':codfte'  => $qdatos["codfte"],
                                    ':preres'  => $qdatos["preres"],
                                    ':numfel'  => $id_encabezado
                                ];
                                //$queryFe = "INSERT INTO documentos(codigo,codemp,chkfte,nombre,email,fecha,insfch,codfte,prefijo,consecutive,jsond,rutaenvio) 
                                //            VALUES ('".$cFactura."','"..":codemp,1,:nombre,:email,:fecha,:fecha,:codfte,:preres,:numfel"+;
                                $queryFe = "INSERT INTO documentos (codigo, codemp, chkfte, nombre, email, fecha, insfch, codfte, prefijo, consecutive, jsond, rutaenvio) 
                                VALUES ('".$cFactura."', '".$codempresa."', 1, '".$qdatos["nomper"]."', '".$qdatos["emlper"]."', '".$qdatos["fchcmp"]."', '".$qdatos["fchcmp"]."',
                                 '".$qdatos["codfte"]."', '".$qdatos["preres"]."', ".$qdatos["numfel"].", '";
                    
                                $invoice = [
                                    "env" => "PRODUCCION",
                                    "dataico_account_id" => $gKey,
                                    "number" => (int)$qdatos["numfel"],
                                    "issue_date" => $qdatos["fchcmp"],
                                    "payment_date" => $qdatos["fincmp"],
                                    "order_reference" => $qdatos["nrorem"],
                                    "invoice_type_code" => "FACTURA_VENTA",
                                    "payment_means" => $mPgod,
                                    "payment_means_type" => $qdatos["fpgod"],
                                    "numbering" => [
                                        "resolution_number" => $qdatos["nrores"],
                                        "prefix" => $qdatos["preres"],
                                        "flexible" => true
                                    ],
                                    "notes" => [$qdatos["obscmp"]],
                                    "customer" => [
                                        "email" => !empty($qdatos["emlper"]) ? $qdatos["emlper"] : $noEmail,
                                        "phone" => $qdatos["telter"],
                                        "party_identification_type" => $qdatos["tidper"],
                                        "party_identification" => $qdatos["nriper"],
                                        "party_type" => ($qdatos["tipper"]=='JUR') ? 'PERSONA_JURIDICA' : 'PERSONA_NATURAL',
                                        "tax_level_code" => ($qdatos["tipreg"]=='49') ? 'SIMPLIFICADO' : 'RESPONSABLE_DE_IVA',
                                        "regimen" => trim($qdatos["resfiscal"]),
                                        "department" => substr($qdatos["codciu"], 0, 2) ,
                                        "city" => substr($qdatos["codciu"], -3),
                                        "address_line" => $qdatos["dirter"],
                                        "country_code" => (!empty($qdatos["paiper"])) ? $qdatos["paiper"] : 'CO',
                                        "company_name" => $qdatos["nomper"],
                                        "first_name" => $qdatos["no1per"],
                                        "family_name" => $qdatos["ap1per"]
                                    ]
                                ];
                                $sw = 1;
                            }
                    
                            // Armar ítem
                            $item = [
                                "sku" => $qdatos["artcod"] ,
                                "quantity" => floatval($qdatos["canart"]),
                                "description" => $qdatos["dspdcm"]. " GUIA " . $qdatos["artser"],
                                "measuring_unit" => "NIU",
                                "price" => floatval($qdatos["vlrdcm"])
                            ];
                    
                            if (!empty($qdatos["pordto"])) {
                                $item["discount_rate"] = floatval($qdatos["pordto"]);
                            }
                    
                            if (!empty($qdatos["poriva"])) {
                                $item["taxes"] = [[
                                    "tax_category" => "IVA",
                                    "tax_rate" => floatval($qdatos["poriva"])
                                ]];
                            }
                    
                            if (!empty($qdatos["pjefte"]) and $qdatos["pjefte"]>0) {
                                $item["retentions"] = [[
                                    "tax_category" => "RET_FUENTE",
                                    "tax_rate" => floatval($qdatos["pjefte"])
                                ]];
                            }
                    
                            $items[] = $item;
                        }
                    
                        $invoice["items"] = $items;
                    
                        if ($vAnt > 0) {
                            $invoice["prepayments"] = [[
                                "amount" => floatval($vAnt),
                                "description" => "ANTICIPO",
                                "received_date" => $fQtai
                            ]];
                        }
                    
                        $dXmld_array = [
                            "actions" => [
                                "send_dian" => true,
                                "send_email" => true
                            ],
                            "invoice" => $invoice
                        ];
                    
                        $dXmld = json_encode($dXmld_array, JSON_UNESCAPED_UNICODE);
                        //echo $dXmld;
                       
                    
                        $gRutafe = $gRutaApi . "&numero=" . $numfel . "&chkfte=1&documento=" . $cFactura . "&prefijo=" . $preFe . "&empresa=" . $codempresa . "&accion=D";
                        //$queryFe = "INSERT INTO documentos(codigo,codemp,chkfte,nombre,email,fecha,insfch,codfte,prefijo,consecutive,jsond,rutaenvio) 
                        //            VALUES (:factura,:codemp,1,:nombre,:email,:fecha,:fecha,:codfte,:preres,:numfel,:jsond,:ruta)";
                        $parametrosFe[':jsond'] = $dXmld;
                        $parametrosFe[':ruta'] = $gRutafe;
                        $queryFe.=$dXmld."', '".$gRutafe."')";
                        //echo $queryFe;

                       $conng = mysqli_connect('69.197.152.107', 'usufe', 'Naty@2012*', 'dnd');

                        // Verificar si la conexión es exitosa
                        if (!$conng) {
                            die("Error de conexión: " . mysqli_connect_error());
                        }

                        // Establecer codificación de caracteres
                        $conng->set_charset("utf8");
                       
                        //Aqui insertamos en documentos y luego ejecutamos el Api de envio dataico.
                        if ($conng->query($queryFe) === TRUE) {
                            //echo "Registro insertado correctamente.";
                            //header("Location: " . $gRutafe);
                            echo json_encode(["success" => true, "ruta" => $gRutafe]);
                        } else {
                            echo json_encode(["success" => false, "error" => "Descripción del error"]);
                        }

                        // Cerrar conexión
                        $conng->close();

                        return;

                        try {
                            //Aqui insertamos en documentos y luego ejecutamos el Api de envio dataico.
                            $resultado = $DBconex->execute_insert($queryFe, $parametrosFe);
                            if ($resultado) {
                                //echo $queryFe;
                                //echo "registrado FE:" . $cFactura;
                                //echo "<pre>";
                                //     print_r($parametrosFe);
                                // echo "</pre>";
                                header("Location: " . $gRutafe);
                                
                                exit;
                            } else {
                                echo "❌ Error al insertar<br>";
                            }
                        } catch (Exception $ex) {
                            echo $ex->getMessage();
                        }
                        
                        
                    }
                }catch(Exception $ex){
                    echo $ex->getMessage();
                }
                
// Al final del proceso, simplemente haz:
echo json_encode(["success" => true, "rutaFE" => $gRutafe]);
// o
echo json_encode(["error" => "Mensaje de error"]);

?>