<?php
session_start();

// Mostrar todos los errores en desarrollo
// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
// error_reporting(E_ALL);

require '../src/PHPMailer.php';
require '../src/SMTP.php';
require '../src/Exception.php';
require '../fpdf185/fpdf.php';

$host = 'localhost';
$db = 'TRAX';
$username = 'root';
$password = 'root';
$conn = new mysqli($host, $username, $password, $db);
if ($conn->connect_error) {
    die("Conexión fallida: " . $conn->connect_error);
}
$conn->set_charset("utf8");

$dsn = "firebird:dbname=C:\\Program Files (x86)\\Common Files\\Aspel\\Sistemas Aspel\\SAE7.00\\Ejemplos\\Ejemplos.FDB;charset=UTF8";
$fb_username = "SYSDBA";
$fb_password = "masterkey";

try {
    $fb_conn = new PDO($dsn, $fb_username, $fb_password);
    $fb_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Error de conexión a Firebird: " . $e->getMessage());
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Recibir datos del formulario
    $nombre = $conn->real_escape_string($_POST['nombre']);
    $rfc = $conn->real_escape_string($_POST['rfc']);
    $telefono = $conn->real_escape_string($_POST['telefono']);
    $estado = $conn->real_escape_string($_POST['estado']);
    $municipio = $conn->real_escape_string($_POST['municipio']);
    $colonia = $conn->real_escape_string($_POST['colonia']);
    $fecha = $conn->real_escape_string($_POST['fecha']);
    $horario = $conn->real_escape_string($_POST['hora']); 
    $tecnico = intval($_POST['tecnico']);
    $factura = $conn->real_escape_string($_POST['factura']); 



    // Insertar orden en MySQL
  $sql = "INSERT INTO ORDENES (CLIENTE, RFC, TELEFONO, ESTADO, MUNICIPIO, COLONIA, CVE_FACTURA, FECHA) 
        VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ssssssss", $nombre, $rfc, $telefono, $estado, $municipio, $colonia, $factura, $fecha);
if (!$stmt->execute()) {
    die("Error al guardar la orden: " . $stmt->error);
}
$cve_orden = $stmt->insert_id;
$stmt->close();



if (!empty($_POST['tecnico']) && is_array($_POST['tecnico'])) {
    $stmt_insert_tecnico = $conn->prepare(
        "INSERT INTO ORDENES_TECNICOS (CVE_ORDEN, CVE_TECNICO) VALUES (?, ?)"
    );
    foreach ($_POST['tecnico'] as $cve_tecnico) {
        $cve_tecnico = intval($cve_tecnico);
        $stmt_insert_tecnico->bind_param("ii", $cve_orden, $cve_tecnico);
        if (!$stmt_insert_tecnico->execute()) {
            die("Error al asignar técnico: " . $stmt_insert_tecnico->error);
        }
    }
    $stmt_insert_tecnico->close();
}

    // Insertar partidas de la orden y calcular total
    $total_orden = 0;
    $iva_total =0;
    $tabla_servicios = "";



    if (!empty($_POST['servicio']) && is_array($_POST['servicio'])) {
        $sql_partida = "INSERT INTO PARTIDAS_ORDEN (CVE_ORDEN, NUM_PARTIDA, SERVICIO, OBSERVACIONES, CANTIDAD, PRECIO_UNITARIO, TOTAL, IVA, HORARIO) 
                        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
        $stmt_partida = $conn->prepare($sql_partida);

        if (!$stmt_partida) {
            die("Error en la preparación de la consulta de partidas: " . $conn->error);
        }

        $num_partida = 1;
        $tabla_servicios = "<table border='1' cellpadding='5' cellspacing='0' style='border-collapse: collapse; width: 100%;'>";
        $tabla_servicios .= "<tr><th>Servicio</th><th>Observaciones</th></tr>";

        foreach ($_POST['servicio'] as $index => $servicio) {
            $servicio = $conn->real_escape_string($servicio);
            $observaciones = $conn->real_escape_string($_POST['observaciones'][$index]);
            $cantidad = intval($_POST['cantidad'][$index]); 
            $precio_unitario = floatval($_POST['precio_unitario'][$index]); 

            $total_partida = $cantidad * $precio_unitario;

            $iva_partida = $total_partida * 0.16;

            $iva_total += $iva_partida;

            // Insertar en la base de datos
            $stmt_partida->bind_param("iisssddds", $cve_orden, $num_partida, $servicio, $observaciones, $cantidad, $precio_unitario, $total_partida, $iva_partida, $horario);
            if (!$stmt_partida->execute()) {
                die("Error al insertar partida: " . $stmt_partida->error);
            }

            $tabla_servicios .= "<tr><td>$servicio</td><td>$observaciones</td></tr>";

            $total_orden += $total_partida;
            $num_partida++;
        }

        $total_con_iva = $total_orden + $iva_total;

        $tabla_servicios .= "</table>";

        $stmt_partida->close();
    }

    $sql_update_importe = "UPDATE ORDENES SET TOTAL = ?, IVA_TOTAL = ?, IMPORTE = ? WHERE CLAVE = ?";
if ($stmt_update = $conn->prepare($sql_update_importe)) {
    $stmt_update->bind_param("dddi", $total_orden, $iva_total, $total_con_iva, $cve_orden);
    if (!$stmt_update->execute()) {
            die("Error al actualizar el importe en la orden: " . $stmt_update->error);
        }
        $stmt_update->close();
    } else {
        die("Error al preparar la consulta de actualización de importe: " . $conn->error);
    }

    // Obtener correos de Técnico y Cliente 
$sql_tecnicos = "SELECT T.MAIL 
                 FROM TECNICOS T 
                 INNER JOIN ORDENES_TECNICOS OT ON T.CVE_TECNICO = OT.CVE_TECNICO 
                 WHERE OT.CVE_ORDEN = ?";
$stmt_tecnicos = $conn->prepare($sql_tecnicos);
$stmt_tecnicos->bind_param("i", $cve_orden);
$stmt_tecnicos->execute();
$result_tecnicos = $stmt_tecnicos->get_result();

$correos_tecnicos = [];
while ($row = $result_tecnicos->fetch_assoc()) {
    $correos_tecnicos[] = $row['MAIL'];
}
$stmt_tecnicos->close();




    $sql_cliente = "SELECT EMAILPRED FROM CLIE01 WHERE UPPER(NOMBRE) = UPPER(?)";
    $stmt_cliente = $fb_conn->prepare($sql_cliente);
    $stmt_cliente->bindParam(1, $nombre, PDO::PARAM_STR);
    $stmt_cliente->execute();
    $correo_cliente = $stmt_cliente->fetchColumn();

    if (!$correo_cliente) {
        die("Error: No se encontró el correo del cliente.");
    }

    function convertirCaracteres($texto)
    {
        return iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $texto);
    }


    // Crear el PDF
    $pdf = new FPDF();
    $pdf->AddPage();
    $pdf->SetLeftMargin(15);
    $pdf->SetRightMargin(15);
    $pdf->SetAutoPageBreak(true, 20);

    $pdf->Image('../img/logo-trax-actualizado.png', 160, 10, 40);
    

    $pdf->SetFont('Arial', 'B', 20);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(0, 10, 'Trax Sistemas S.A. de C.V.', 0, 1, 'L');


    $pdf->SetFont('Arial', '', 10);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(0, 5, iconv('UTF-8', 'ISO-8859-1//TRANSLIT', 'Av. Calz. de la Viga, Vía Morelos 34, Renovacion Jajalpa'), 0, 1, 'L');
    $pdf->Cell(0, 5, iconv('UTF-8', 'ISO-8859-1//TRANSLIT', '55040 Ecatepec de Morelos, Méx.'), 0, 1, 'L');
    $pdf->Cell(0, 5, '(52) 55 8367 8850 | atencionaclientes@traxsistemas.com.mx', 0, 1, 'L');
    $pdf->Ln(10);

    $y_inicio = $pdf->GetY();

    // **Datos del Cliente**
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(130, 8, 'CLIENTE:', 0, 0, 'L');
    $pdf->SetFont('Arial', 'B', 14);
    $pdf->SetFillColor(156, 5, 41);
    $pdf->SetTextColor(255, 255, 255);
    $pdf->Cell(55, 8, utf8_decode('Orden #') . $cve_orden, 0, 1, 'C', true);

    // **Cliente**
    $pdf->SetFont('Arial', 'B', 12);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(130, 8, $nombre, 0, 0, 'L');

    // **Fecha Emitida**
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetFillColor(242, 242, 242);
    $pdf->SetDrawColor(200, 200, 200);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(25, 8, 'Emitida:', '0', 0, 'C', true);
    $pdf->Cell(30, 8, date('Y-m-d'), '0', 1, 'C', true);

    // **Ubicación del Cliente**
    $pdf->SetFont('Arial', '', 12);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(130, 8, $colonia . ', ' . $municipio . ', ' . $estado, 0, 0, 'L');

    // **Fecha de Vencimiento**
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetFillColor(242, 242, 242);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(25, 8, 'Vence:', '0', 0, 'C', true);
    $pdf->Cell(30, 8, date('Y-m-d', strtotime('+30 days')), '0', 1, 'C', true);

    // **Total resaltado**
    $pdf->SetFont('Arial', 'B', 14);
    $pdf->SetFillColor(156, 5, 41);
    $pdf->SetTextColor(255, 255, 255);
    $pdf->Cell(130, 8, '', 0, 0);
    $pdf->Cell(25, 8, 'Total:', 2, 0, 'C', true);
    $pdf->Cell(30, 8, '$' . number_format($total_con_iva, 2), 0, 1, 'C', true);

    $pdf->Ln(10);


    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(55, 8, utf8_decode('Su Factura:') . $factura, 0, 1, 'L');


    // --- SERVICIOS ---
    $pdf->SetFont('Arial', 'B', 14);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(0, 8, 'Servicios Realizados', 0, 1, 'L');
    $pdf->Ln(3);

    // Encabezado de la tabla
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->SetFillColor(156, 5, 41);
    $pdf->SetTextColor(255, 255, 255);
    $pdf->Cell(50, 10, 'Producto / Servicio', 0, 0, 'C', true);

    $pdf->Cell(80, 10, iconv('UTF-8', 'ISO-8859-1//TRANSLIT', 'Descripción'), 0, 0, 'C', true);

    $pdf->Cell(15, 10, 'Cant.', 0, 0, 'C', true);
    $pdf->Cell(20, 10, 'precio uni', 0, 0, 'C', true);
    $pdf->Cell(20, 10, 'total', 0, 1, 'C', true);

    // Contenido de la tabla
    $pdf->SetFont('Arial', '', 10);
    $pdf->SetTextColor(65, 86, 114);

    $total_orden = 0;

    foreach ($_POST['servicio'] as $index => $servicio) {
        $descripcion = $_POST['observaciones'][$index];
        $cantidad = $_POST['cantidad'][$index];
        $precio_unitario =  $_POST['precio_unitario'][$index];
       
        $total_partida = $cantidad * $precio_unitario;

        $total_orden += $total_partida;

        $pdf->Cell(50, 8, utf8_decode($servicio), 1);
        $pdf->Cell(80, 8, utf8_decode($descripcion), 1);
        $pdf->Cell(15, 8, utf8_decode($cantidad), 1, 0, 'C');
        $pdf->Cell(20, 8, utf8_decode("$" . number_format($precio_unitario, 2)), 1, 0, 'C');
        $pdf->Cell(20, 8, utf8_decode("$" . number_format($total_partida, 2)), 1, 1, 'C');
    }

    $pdf->Ln(10);

    // --- TOTALES ---
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->Cell(125, 6, '', 0, 0);
    $pdf->SetTextColor(65, 86, 114);
    $pdf->Cell(35, 6, 'Subtotal:', 0, 0, 'L');
    $pdf->Cell(25, 6, '$' . number_format($total_orden, 2), 0, 1, 'R');

    $pdf->Cell(125, 6, '', 0, 0);
    $pdf->Cell(35, 6, 'IVA (16%):', 0, 0, 'L');
    $pdf->Cell(25, 6, '$' . number_format($iva_total, 2), 0, 1, 'R');

    $pdf->SetFont('Arial', 'B', 14);
    $pdf->Cell(125, 8, '', 0, 0);
    $pdf->Cell(35, 8, 'Total:', 0, 0, 'L');
    $pdf->Cell(25, 8, '$' . number_format($total_con_iva, 2), 0, 1, 'R');

    $pdf->Ln(10);

    $pdf->SetFont('Arial', 'I', 10);
    $pdf->SetTextColor(128, 128, 128);
    $pdf->Cell(0, 10, 'Gracias por su preferencia.', 0, 1, 'C');

    $pdfOutput = $pdf->Output('', 'S');

    // Eenviar correo con adjunto
    function enviarCorreoConAdjunto($destinatario, $asunto, $contenido, $pdfOutput, $nombreArchivo)
    {
        $mail = new PHPMailer\PHPMailer\PHPMailer();
        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'dachavion3@gmail.com';
        $mail->Password = 'gccqojqquxmlkvkg';
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;

        $mail->setFrom('dachavion3@gmail.com', 'Trax Sistemas');
        $mail->addAddress($destinatario);
        $mail->CharSet = 'UTF-8';

        $mail->addStringAttachment($pdfOutput, $nombreArchivo, 'base64', 'application/pdf');

        $mail->isHTML(true);
        $mail->Subject = $asunto;
        $mail->Body = $contenido;

        if (!$mail->send()) {
            die("Error al enviar el correo: " . $mail->ErrorInfo);
        }
    }

    // Contenido del correo para el técnico
    $asunto_tecnico = "Nueva Orden de Servicio #$cve_orden";
    $htmlContent = "
<html>
<head>
<meta charset='UTF-8'>
    <title>Nueva Orden de Servicio Asignada</title>
    <style>
        body { font-family: Arial, sans-serif; color: #333; background-color: #f4f4f9; padding: 20px; }
        .header { text-align: center; background-color: #9c0529; color: white; padding: 10px; }
        .content { margin: 20px 0; }
        .footer { margin-top: 30px; font-size: 12px; color: #888; text-align: center; }
        table { border-collapse: collapse; width: 100%; }
        th, td { padding: 8px; text-align: left; border: 1px solid #ddd; }
        th { background-color: #f2f2f2; }
    </style>
</head>
<body>
    <div class='header'>
        <h2>Trax Sistemas S.A de C.V.</h2>
    </div>
    <div class='content'>
        <h2>Hola, tienes una nueva orden de servicio asignada.</h2>
        <p><strong>Detalles de la orden:</strong></p>
        <ul>
            <li><strong>Cliente:</strong> $nombre</li>
            <li><strong>Fecha:</strong> " . date("d-m-Y", strtotime($fecha)) . "</li>
        </ul>
        <p><strong>Servicios a realizar:</strong></p>
        $tabla_servicios
        <p>Por favor revisa el sistema para más detalles.</p>
    </div>
    <div class='footer'>
        <p>Este es un correo automático. No respondas a este mensaje.</p>
    </div>
</body>
</html>
";

    // Contenido del correo para el cliente
    $asunto_cliente = "Confirmación de Orden de Servicio #$cve_orden";

    $htmlContentCliente = "
    <html>
    <head>
    <meta charset='UTF-8'>

        <style>
            body { font-family: Arial, sans-serif; color: #333; background-color: #f4f4f9; padding: 20px; }
            .header { text-align: center; background-color: #9c0529; color: white; padding: 10px; }
            .content { margin: 20px 0; }
            .footer { margin-top: 30px; font-size: 12px; color: #888; text-align: center; }
            table { border-collapse: collapse; width: 100%; }
            th, td { padding: 8px; text-align: left; border: 1px solid #ddd; }
            th { background-color: #f2f2f2; }
        </style>
    </head>
    <body>
        <div class='header'>
            <h2>Trax Sistemas S.A de C.V.</h2>
        </div>
        <div class='content'>
            <h2>Estimado(a) $nombre,</h2>
            <p><strong><p>Su orden de servicio ha sido registrada exitosamente.</p></strong></p>
            
            <p><strong>Fecha de servicio:</strong> " . date("d-m-Y", strtotime($fecha)) . "</p>           
            <p><strong>Detalles del servicio:</strong></p>
        </div>
       
    </body>
    </html>
    ";

   foreach ($correos_tecnicos as $correo_tecnico) {
    if (!empty($correo_tecnico)) {
        $mail = new PHPMailer\PHPMailer\PHPMailer();
        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'dachavion3@gmail.com';
        $mail->Password = 'gccqojqquxmlkvkg';
        $mail->SMTPSecure = 'tls';
        $mail->Port = 587;

        $mail->setFrom('dachavion3@gmail.com', 'Trax Sistemas');
        $mail->addAddress($correo_tecnico);
        $mail->CharSet = 'UTF-8';
        $mail->isHTML(true);
        $mail->Subject = $asunto_tecnico;
        $mail->Body = $htmlContent;

        if (!$mail->send()) {
            echo "Error al enviar a $correo_tecnico: " . $mail->ErrorInfo . "<br>";
        } else {
            echo "Correo enviado a: $correo_tecnico<br>";
        }
    }
}

    if ($correo_cliente) {
        enviarCorreoConAdjunto($correo_cliente, $asunto_cliente, $htmlContentCliente, $pdfOutput, "orden_servicio_$cve_orden.pdf");
    }

    echo "Orden registrada y correos enviados correctamente.";
}
