<?php
/**
 * TechShop Perú - Configuración General (Admin)
 */
define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

require_admin();
$db = db();

if ($_SERVER['REQUEST_METHOD'] === 'POST' && csrf_verify()) {
    $enviarPrueba = isset($_POST['enviar_prueba']) && $_POST['enviar_prueba'] === '1';
    $campos = ['tienda_nombre', 'tienda_slogan', 'tienda_email', 'tienda_telefono', 'tienda_whatsapp', 'tienda_direccion', 'tienda_ruc', 'moneda', 'igv_porcentaje', 'smtp_host', 'smtp_port', 'smtp_user', 'smtp_pass', 'paypal_client_id', 'paypal_client_secret', 'paypal_mode'];
    
    try {
        $db->beginTransaction();
        
        foreach ($campos as $c) {
            if (isset($_POST[$c])) {
                $valor = sanitize($_POST[$c]);
                // Campos sensibles: si llegan vacíos, conservar el valor actual
                // (los secretos ya no se muestran en el formulario).
                if (in_array($c, ['smtp_pass', 'paypal_client_secret'], true) && $valor === '') {
                    continue;
                }
                if (!save_db_config($c, $valor)) {
                    throw new Exception('No se pudo guardar una configuración.');
                }
            }
        }
        $db->commit();

        // Enviar correo de prueba (usa los valores recién guardados).
        if ($enviarPrueba) {
            require_once __DIR__ . '/../includes/mail_functions.php';

            $destino = trim((string) ($_POST['email_prueba'] ?? ''));
            if ($destino === '') {
                $destino = defined('TIENDA_EMAIL') ? TIENDA_EMAIL : '';
            }

            if (!filter_var($destino, FILTER_VALIDATE_EMAIL)) {
                set_flash('error', 'Configuración guardada, pero no se envió el correo de prueba: dirección de destino no válida.');
            } else {
                // Usar los mismos valores sanitizados que se guardan, para que la
                // prueba refleje exactamente lo que queda persistido en la BD.
                $smtpHost = sanitize((string) ($_POST['smtp_host'] ?? ''));
                $smtpPort = (int) sanitize((string) ($_POST['smtp_port'] ?? ''));
                if ($smtpPort <= 0 || $smtpPort > 65535) {
                    $smtpPort = 587;
                }
                $smtpUser = sanitize((string) ($_POST['smtp_user'] ?? ''));
                // smtp_pass no se muestra: si viene vacío, usar el valor actual de la BD.
                $smtpPass = sanitize((string) ($_POST['smtp_pass'] ?? ''));
                if ($smtpPass === '') {
                    $confActual = load_db_config();
                    $smtpPass = (string) ($confActual['smtp_pass'] ?? '');
                }

                $resultado = send_test_email($destino, $smtpHost, $smtpPort, $smtpUser, $smtpPass);

                if ($resultado['ok']) {
                    set_flash('success', 'Configuración guardada y correo de prueba enviado a ' . e($destino) . '.');
                } else {
                    // Mostrar solo la primera frase del error SMTP (más legible).
                    $detalle = explode("\n", trim($resultado['error']))[0] ?? '';
                    $detalle = mb_strlen($detalle) > 200 ? mb_substr($detalle, 0, 197) . '…' : $detalle;
                    set_flash('error', 'Configuración guardada, pero el correo de prueba falló: ' . e($detalle));
                }
            }
        } else {
            set_flash('success', 'Configuración actualizada correctamente.');
        }
    } catch (Exception $e) {
        if ($db->inTransaction()) {
            $db->rollBack();
        }
        set_flash('error', 'Error al guardar la configuración: ' . $e->getMessage());
    }
    redirect('panel-admin-tech/configuracion.php');
}

// Cargar configuraciones actuales de la DB
$conf = load_db_config();

$page_title = 'Configuración General';
require_once __DIR__ . '/views/layout.php';
?>

<div class="row justify-content-center">
    <div class="col-lg-8">
        <div class="card border-0 shadow-sm rounded-4">
            <div class="card-header bg-white border-0 px-4 pt-4 pb-2">
                <h5 class="fw-bold mb-0"><i class="bi bi-sliders me-2 text-primary"></i>Datos de la Tienda</h5>
                <p class="text-muted small mb-0 mt-1">Estos datos se reflejarán en el header, footer y recibos.</p>
            </div>
            
            <div class="card-body p-4">
                <form action="" method="post">
                    <input type="hidden" name="csrf_token" value="<?= csrf_token() ?>">
                    
                    <div class="row g-3">
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Nombre de la Tienda</label>
                            <input type="text" name="tienda_nombre" class="form-control" value="<?= e($conf['tienda_nombre'] ?? '') ?>" required>
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Slogan</label>
                            <input type="text" name="tienda_slogan" class="form-control" value="<?= e($conf['tienda_slogan'] ?? '') ?>">
                        </div>
                        
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Email de Contacto</label>
                            <input type="email" name="tienda_email" class="form-control" value="<?= e($conf['tienda_email'] ?? '') ?>" required>
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Teléfono Fijo</label>
                            <input type="text" name="tienda_telefono" class="form-control" value="<?= e($conf['tienda_telefono'] ?? '') ?>">
                        </div>
                        
                        <div class="col-md-6">
                            <label class="form-label fw-medium">WhatsApp</label>
                            <input type="text" name="tienda_whatsapp" class="form-control" value="<?= e($conf['tienda_whatsapp'] ?? '') ?>">
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">RUC</label>
                            <input type="text" name="tienda_ruc" class="form-control" value="<?= e($conf['tienda_ruc'] ?? '') ?>">
                        </div>
                        
                        <div class="col-12">
                            <label class="form-label fw-medium">Dirección Física</label>
                            <input type="text" name="tienda_direccion" class="form-control" value="<?= e($conf['tienda_direccion'] ?? '') ?>">
                        </div>
                        
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Moneda</label>
                            <input type="text" name="moneda" class="form-control" value="<?= e($conf['moneda'] ?? '') ?>" required>
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">IGV (%)</label>
                            <input type="number" name="igv_porcentaje" class="form-control" value="<?= e($conf['igv_porcentaje'] ?? '') ?>" min="0" max="100" required>
                        </div>
                    </div>
                    
                    <h6 class="fw-bold mt-4 mb-3"><i class="bi bi-envelope me-2 text-primary"></i>Configuración de Correo (SMTP)</h6>
                    <div class="row g-3">
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Servidor SMTP (Host)</label>
                            <input type="text" name="smtp_host" class="form-control" value="<?= e($conf['smtp_host'] ?? '') ?>">
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Puerto SMTP</label>
                            <input type="number" name="smtp_port" class="form-control" value="<?= e($conf['smtp_port'] ?? '') ?>">
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Usuario SMTP</label>
                            <input type="text" name="smtp_user" class="form-control" value="<?= e($conf['smtp_user'] ?? '') ?>">
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">Contraseña SMTP</label>
                            <input type="password" name="smtp_pass" class="form-control" placeholder="******** (dejar vacío para no cambiar)" autocomplete="new-password">
                        </div>
                    </div>

                    <div class="row g-3 mt-1 align-items-end">
                        <div class="col-md-8">
                            <label class="form-label fw-medium"><i class="bi bi-send me-1"></i>Probar envío de correo</label>
                            <input type="email" name="email_prueba" class="form-control" placeholder="correo de prueba (por defecto: email de la tienda)" value="<?= e($conf['tienda_email'] ?? '') ?>">
                            <small class="text-muted">Envía un correo con la configuración SMTP actual para verificar que funciona.</small>
                        </div>
                        <div class="col-md-4">
                            <button type="submit" name="enviar_prueba" value="1" class="btn btn-outline-primary w-100">
                                <i class="bi bi-envelope-check me-2"></i>Enviar correo de prueba
                            </button>
                        </div>
                    </div>

                    <h6 class="fw-bold mt-4 mb-3"><i class="bi bi-paypal me-2 text-primary"></i>Configuración de Pagos</h6>
                    <div class="row g-3">
                        <div class="col-md-6">
                            <label class="form-label fw-medium">PayPal Client ID</label>
                            <input type="text" name="paypal_client_id" class="form-control" value="<?= e($conf['paypal_client_id'] ?? '') ?>">
                            <small class="text-muted">Si está vacío, los pagos con tarjeta/PayPal estarán desactivados.</small>
                        </div>
                        <div class="col-md-6">
                            <label class="form-label fw-medium">PayPal Client Secret</label>
                            <input type="password" name="paypal_client_secret" class="form-control" placeholder="•••••••••••••• (dejar vacío para no cambiar)" autocomplete="new-password">
                            <small class="text-muted">Requerido para verificar los pagos en el servidor. No compartas este valor.</small>
                        </div>
                        <div class="col-12">
                            <label class="form-label fw-medium">Modo PayPal</label>
                            <select name="paypal_mode" class="form-select">
                                <option value="sandbox" <?= ($conf['paypal_mode'] ?? '') === 'sandbox' ? 'selected' : '' ?>>Sandbox (pruebas)</option>
                                <option value="live" <?= ($conf['paypal_mode'] ?? '') === 'live' ? 'selected' : '' ?>>Live (producción)</option>
                            </select>
                            <small class="text-muted">Usa Sandbox para pruebas y Live para cobros reales.</small>
                        </div>
                    </div>
                    
                    <hr class="my-4">
                    <div class="text-end">
                        <button type="submit" class="btn btn-primary px-4"><i class="bi bi-save me-2"></i>Guardar Cambios</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
