<?php

namespace serviciosms;

require_once __DIR__ . '/../conexion_bbdd/vendor/autoload.php';
require_once __DIR__ . '/../conexion_bbdd/Config/Database.php';
require_once __DIR__ . '/../Logger.php';

use Utils\Database;
use Utils\Logger;
// Permitir el acceso desde cualquier origen (para desarrollo)
header("Access-Control-Allow-Origin: *");

// Permitir métodos HTTP específicos
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");

// Permitir encabezados personalizados
header("Access-Control-Allow-Headers: Content-Type, Authorization");
try {
    // Conexión a la base de datos
    $pdo = Database::conectar();
    
    // Obtener el idServiceOrder de la solicitud GET
    $idServiceOrder = isset($_GET['idServiceOrder']) ? $_GET['idServiceOrder'] : null;

    // Consulta SQL con parámetro condicional
    $consulta = "
    SELECT 
        ch.email as \"correo_electronico_cliente\",
        ch.address as \"direccion_del_cliente\",
        ch.id as \"id_cliente\",
        ch.attorney as \"nombre_cliente_a_facturar\",
        ch.name as \"nombre_paciente\",
        ch.\"lastNameFather\" as \"apellido_paciente_paterno\",
        ch.\"lastNameMother\" as \"apellido_paciente_materno\",
        ch.invoise_num_document as \"numero_documento_cliente\",
        ch.invoise_type_document as \"tipo_documento_cliente\",
        CASE 
		WHEN ch.invoise_type_document = 'RUC' then (SELECT serie FROM enumeracion_ivoice WHERE id = 1)
        ELSE (SELECT serie FROM enumeracion_ivoice WHERE id = 2)
        END AS \"serie_recibo\",
        CASE 
            WHEN ch.invoise_type_document = 'RUC' then (SELECT correlative FROM enumeracion_ivoice WHERE id = 1)
        ELSE (SELECT correlative FROM enumeracion_ivoice WHERE id = 2)
        END AS \"numero_recibo\"
    FROM service_order so
    LEFT JOIN clinic_history ch ON ch.id = so.idclinichistory
    WHERE so.id = :idServiceOrder";

    // Preparar la consulta con el parámetro
    $stmt = $pdo->prepare($consulta);
    $stmt->bindParam(':idServiceOrder', $idServiceOrder, \PDO::PARAM_INT);
    $stmt->execute();
    $resultado = $stmt->fetch(\PDO::FETCH_ASSOC);

    // Verificar el tipo de documento y construir la URL correspondiente
    if ($resultado['tipo_documento_cliente'] === "DNI") {
        // Construir la URL para consulta externa
        $urlConsulta = "http://sistema.maxillaris.pe/APLICATIVOS/consulta_doc_re/consulta_dni-ruc.php?dni={$resultado['numero_documento_cliente']}";
        
        // Realizar la consulta externa
        $respuesta = file_get_contents($urlConsulta);
        $data = json_decode($respuesta, true);

        // Construir el nombre del cliente a facturar para DNI
        $nombre_cliente_a_facturar = $data['nombres'] . ' ' . $data['apellidoPaterno'] . ' ' . $data['apellidoMaterno'];
    } elseif ($resultado['tipo_documento_cliente'] === "RUC") {
        // Construir la URL para consulta externa
        $urlConsulta = "http://sistema.maxillaris.pe/APLICATIVOS/consulta_doc_re/consulta_dni-ruc.php?ruc={$resultado['numero_documento_cliente']}";
        
        // Realizar la consulta externa
        $respuesta = file_get_contents($urlConsulta);
        $data = json_decode($respuesta, true);

        // Obtener la razón social para RUC
        $nombre_cliente_a_facturar = $data['razonSocial'];
    } else {
        // En caso de otro tipo de documento, usar el nombre del cliente directamente
        $nombre_cliente_a_facturar = $resultado['nombre_cliente_a_facturar'];
    }

    // Estructurar los datos del cliente según el formato deseado
    $datosCliente = [
        'correo_electronico_cliente' => $resultado['correo_electronico_cliente'],
        'direccion_del_cliente' => $resultado['direccion_del_cliente'],
        'id_cliente' => (int) $resultado['id_cliente'],
        'nombre_cliente_a_facturar' => $nombre_cliente_a_facturar,
        'nombre_paciente' => $resultado['nombre_paciente'],
        'numero_documento_cliente' => $resultado['numero_documento_cliente'],
        'tipo_documento_cliente' => $resultado['tipo_documento_cliente'],
        'numero_recibo' => $resultado['numero_recibo'],
        'serie_recibo' => $resultado['serie_recibo'],
    ];

    // Devolver los resultados estructurados como JSON
    echo json_encode(['datosCliente' => $datosCliente]);
} catch (\PDOException $e) {
    $mensajeError = "Error al conectar con la base de datos: " . $e->getMessage();
    Logger::logError('ERROR', $mensajeError, __FILE__, __LINE__);
    echo json_encode(['success' => false, 'message' => 'Error ' . $mensajeError]);
} catch (\Exception $e) {
    $mensajeError = "Error no capturado: " . $e->getMessage();
    Logger::logError('ERROR', $mensajeError, __FILE__, __LINE__);
    echo json_encode(['success' => false, 'message' => 'Error ' . $mensajeError]);
}
?>