<?php
/**
 * Página: Editar Invitado
 */

$eventoId = getEventoId();
$evento = obtenerEvento($eventoId);
// Tomar el ID tanto de GET como de POST (para soportar el modal de invitados)
$id = isset($_GET['id']) ? intval($_GET['id']) : intval($_POST['id'] ?? 0);
$error = '';
$success = '';
// Detectar si es una petición AJAX
$isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';

// Obtener invitado
$stmt = $pdo->prepare("SELECT * FROM invitados WHERE id = ? AND evento_id = ?");
$stmt->execute([$id, $eventoId]);
$invitado = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$invitado) {
    if ($isAjax) {
        header('Content-Type: application/json');
        echo json_encode(['success' => false, 'message' => 'Invitado no encontrado']);
        exit;
    } else {
        header('Location: ?page=invitados');
        exit;
    }
}

// Obtener admisiones actuales
$admisiones = obtenerAdmisiones($id);

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Asegurar que usamos el ID que viene del formulario (modal)
    $id = intval($_POST['id'] ?? $id);
    $nombre_cortesia = sanitize($_POST['nombre_cortesia'] ?? 'Sr.');
    $nombre_invitado = sanitize($_POST['nombre_invitado'] ?? '');
    $email = sanitize($_POST['email'] ?? '');
    $telefono = sanitize($_POST['telefono'] ?? '');
    $invitacion_de = sanitize($_POST['invitacion_de'] ?? '');
    $invitacion_de_personalizado = sanitize($_POST['invitacion_de_personalizado'] ?? '');
    $estado = sanitize($_POST['estado'] ?? 'Pendiente');
    // Validar que el estado sea uno de los valores permitidos
    $estados_permitidos = ['Pendiente', 'Aceptado', 'Rechazado'];
    if (!in_array($estado, $estados_permitidos)) {
        $estado = 'Pendiente';
    }
    $numero_admisiones = intval($_POST['numero_admisiones'] ?? 1);
    // Recibir nombres de admisiones (puede venir como array o como array indexado)
    $nombres_admisiones = [];
    if (isset($_POST['nombres_admisiones']) && is_array($_POST['nombres_admisiones'])) {
        $nombres_admisiones = $_POST['nombres_admisiones'];
    }
    
    // Si es personalizado, usar el texto personalizado
    if ($invitacion_de === 'Personalizado' && !empty($invitacion_de_personalizado)) {
        $invitacion_de = $invitacion_de_personalizado;
    }
    
    if (empty($nombre_invitado)) {
        $error = 'El nombre del invitado es requerido';
        if ($isAjax) {
            header('Content-Type: application/json');
            echo json_encode(['success' => false, 'message' => $error]);
            exit;
        }
    } else {
        try {
            $pdo->beginTransaction();
            
            // Actualizar invitado
            $stmt = $pdo->prepare("
                UPDATE invitados SET
                    nombre_cortesia = ?,
                    nombre_invitado = ?,
                    email = ?,
                    telefono = ?,
                    invitacion_de = ?,
                    estado = ?,
                    numero_admisiones = ?
                WHERE id = ?
            ");
            $stmt->execute([
                $nombre_cortesia,
                $nombre_invitado,
                $email ?: null,
                $telefono ?: null,
                $invitacion_de ?: null,
                $estado,
                $numero_admisiones,
                $id
            ]);
            
            // Eliminar admisiones antiguas
            $stmt = $pdo->prepare("DELETE FROM admisiones WHERE invitado_id = ?");
            $stmt->execute([$id]);
            
            // Insertar nuevas admisiones
            // El número de admisiones incluye al invitado principal, así que los acompañantes son numero_admisiones - 1
            // Log para debug
            error_log("DEBUG editar.php - numero_admisiones: " . $numero_admisiones);
            error_log("DEBUG editar.php - nombres_admisiones: " . print_r($nombres_admisiones, true));
            
            if ($numero_admisiones > 1) {
                $stmt = $pdo->prepare("INSERT INTO admisiones (invitado_id, nombre_acompanante, orden) VALUES (?, ?, ?)");
                $orden = 1;
                if (!empty($nombres_admisiones) && is_array($nombres_admisiones)) {
                    foreach ($nombres_admisiones as $nombre) {
                        $nombre = trim($nombre);
                        if (!empty($nombre)) {
                            $stmt->execute([$id, sanitize($nombre), $orden]);
                            error_log("DEBUG editar.php - Insertada admisión: " . sanitize($nombre) . " orden: " . $orden);
                            $orden++;
                        }
                    }
                } else {
                    error_log("DEBUG editar.php - nombres_admisiones está vacío o no es array");
                }
            } else {
                error_log("DEBUG editar.php - numero_admisiones <= 1, no se insertan admisiones");
            }
            
            $pdo->commit();
            registrarLog($eventoId, 'invitado', 'Actualizar', "Invitado actualizado: ID $id - $nombre_invitado");
            $success = 'Invitado actualizado correctamente';
            
            // Recargar datos
            $stmt = $pdo->prepare("SELECT * FROM invitados WHERE id = ?");
            $stmt->execute([$id]);
            $invitado = $stmt->fetch(PDO::FETCH_ASSOC);
            $admisiones = obtenerAdmisiones($id);
            
            if ($isAjax) {
                header('Content-Type: application/json');
                echo json_encode(['success' => true, 'message' => $success]);
                exit;
            }
        } catch (Exception $e) {
            $pdo->rollBack();
            $error = 'Error al actualizar: ' . $e->getMessage();
            if ($isAjax) {
                header('Content-Type: application/json');
                echo json_encode(['success' => false, 'message' => $error]);
                exit;
            }
        }
    }
}
?>
<style>
.form-container {
    background: var(--color-bg-secondary);
    padding: 30px;
    border-radius: var(--border-radius);
    box-shadow: var(--shadow-md);
    max-width: 800px;
    margin: 0 auto;
}
.form-group {
    margin-bottom: 20px;
}
label {
    display: block;
    margin-bottom: 5px;
    color: var(--color-text-primary);
    font-weight: 500;
}
input, select, textarea {
    width: 100%;
    padding: 10px;
    border: 1px solid var(--color-border);
    border-radius: var(--border-radius);
    font-size: 16px;
}
.btn {
    padding: 12px 30px;
    background: var(--color-primary);
    color: white;
    border: none;
    border-radius: var(--border-radius);
    cursor: pointer;
    font-size: 16px;
    margin-right: 10px;
    text-decoration: none;
    display: inline-block;
}
.btn:hover {
    background: var(--color-primary-hover);
}
.btn-secondary {
    background: var(--color-text-secondary);
}
.alert {
    padding: 15px;
    border-radius: var(--border-radius);
    margin-bottom: 20px;
}
.alert-error {
    background: #fff5f5;
    color: #c53030;
    border: 1px solid #fed7d7;
}
.alert-success {
    background: #f0fff4;
    color: #22543d;
    border: 1px solid #c6f6d5;
}
#admisiones-container {
    margin-top: 10px;
}
.admision-item {
    display: flex;
    gap: 10px;
    margin-bottom: 10px;
}
.admision-item input {
    flex: 1;
}
</style>

<div class="form-container">
    <h2 class="card-title" style="margin-bottom: 24px;">Editar Invitado</h2>
    
    <?php if ($error): ?>
        <div class="alert alert-error"><?php echo htmlspecialchars($error); ?></div>
    <?php endif; ?>
    
    <?php if ($success): ?>
        <div class="alert alert-success"><?php echo htmlspecialchars($success); ?></div>
    <?php endif; ?>
    
    <form method="POST" action="">
        <div class="form-group">
            <label>Nombre de Cortesía</label>
            <select name="nombre_cortesia">
                <option value="Sr." <?php echo $invitado['nombre_cortesia'] === 'Sr.' ? 'selected' : ''; ?>>Sr.</option>
                <option value="Sra." <?php echo $invitado['nombre_cortesia'] === 'Sra.' ? 'selected' : ''; ?>>Sra.</option>
                <option value="Srta." <?php echo $invitado['nombre_cortesia'] === 'Srta.' ? 'selected' : ''; ?>>Srta.</option>
                <option value="Sres." <?php echo $invitado['nombre_cortesia'] === 'Sres.' ? 'selected' : ''; ?>>Sres.</option>
                <option value="Fam." <?php echo $invitado['nombre_cortesia'] === 'Fam.' ? 'selected' : ''; ?>>Fam.</option>
            </select>
        </div>
        
        <div class="form-group">
            <label>Nombre del Invitado *</label>
            <input type="text" name="nombre_invitado" required value="<?php echo htmlspecialchars($invitado['nombre_invitado']); ?>">
        </div>
        
        <div class="form-group">
            <label>Email</label>
            <input type="email" name="email" value="<?php echo htmlspecialchars($invitado['email'] ?? ''); ?>">
        </div>
        
        <div class="form-group">
            <label>Teléfono</label>
            <input type="text" name="telefono" value="<?php echo htmlspecialchars($invitado['telefono'] ?? ''); ?>">
        </div>
        
        <div class="form-group">
            <label for="invitacion_de">Invitación de *</label>
            <?php 
            $opcionesInvitacion = obtenerOpcionesInvitacionDe($evento);
            $mostrarPersonalizado = false;
            $invitacionDeActual = $invitado['invitacion_de'] ?? '';
            // Verificar si el valor actual es personalizado (no está en las opciones)
            $esPersonalizado = !empty($invitacionDeActual) && !in_array($invitacionDeActual, array_keys($opcionesInvitacion));
            ?>
            <select id="invitacion_de" name="invitacion_de" required onchange="togglePersonalizado()">
                <option value="">Seleccione...</option>
                <?php foreach ($opcionesInvitacion as $valor => $etiqueta): ?>
                    <?php 
                    if ($valor === 'Personalizado') {
                        $mostrarPersonalizado = true;
                    }
                    ?>
                    <option value="<?php echo htmlspecialchars($valor); ?>" 
                            <?php echo ($invitacionDeActual === $valor || ($esPersonalizado && $valor === 'Personalizado')) ? 'selected' : ''; ?>>
                        <?php echo htmlspecialchars($etiqueta); ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <?php if ($mostrarPersonalizado): ?>
                <div id="personalizado-container" style="display: <?php echo ($esPersonalizado || (isset($_POST['invitacion_de']) && $_POST['invitacion_de'] === 'Personalizado')) ? 'block' : 'none'; ?>; margin-top: 10px;">
                    <input type="text" id="invitacion_de_personalizado" name="invitacion_de_personalizado" 
                           placeholder="Escriba el nombre personalizado"
                           value="<?php echo $esPersonalizado ? htmlspecialchars($invitacionDeActual) : htmlspecialchars($_POST['invitacion_de_personalizado'] ?? ''); ?>">
                </div>
            <?php endif; ?>
        </div>
        
        <div class="form-group">
            <label>Número de Admisiones</label>
            <input type="number" name="numero_admisiones" min="1" value="<?php echo $invitado['numero_admisiones']; ?>" onchange="actualizarAdmisiones()">
        </div>
        
        <div class="form-group" id="grupo-admisiones-editar">
            <label>Nombres de Admisiones</label>
            <div id="admisiones-container"></div>
        </div>
        
        <div>
            <button type="submit" class="btn">Guardar Cambios</button>
            <a href="?page=invitados" class="btn btn-secondary">Cancelar</a>
        </div>
    </form>
</div>

<script>
    const admisionesActuales = <?php echo json_encode($admisiones); ?>;
    
    function actualizarAdmisiones() {
        const numero = parseInt(document.querySelector('[name="numero_admisiones"]').value) || 1;
        const container = document.getElementById('admisiones-container');
        const grupo = document.getElementById('grupo-admisiones-editar');
        
        if (!container) return;
        
        container.innerHTML = '';
        
        // Si solo hay 1 admisión, es solo el invitado principal: ocultar nombres de admisiones
        if (numero <= 1) {
            if (grupo) grupo.style.display = 'none';
            return;
        }
        
        // Mostrar grupo de admisiones y crear campos solo para acompañantes (numero - 1)
        if (grupo) grupo.style.display = 'block';
        const numAcompanantes = numero - 1;
        
        for (let i = 0; i < numAcompanantes; i++) {
            const div = document.createElement('div');
            div.className = 'admision-item';
            div.innerHTML = `
                <input type="text" name="nombres_admisiones[]" 
                       placeholder="Nombre del acompañante ${i + 1}"
                       value="${admisionesActuales[i] || ''}">
            `;
            container.appendChild(div);
        }
    }
    
    actualizarAdmisiones();
    
    function togglePersonalizado() {
        const select = document.getElementById('invitacion_de');
        const container = document.getElementById('personalizado-container');
        if (container) {
            if (select.value === 'Personalizado') {
                container.style.display = 'block';
                document.getElementById('invitacion_de_personalizado').required = true;
            } else {
                container.style.display = 'none';
                document.getElementById('invitacion_de_personalizado').required = false;
            }
        }
    }
</script>

