<?php
session_start();
// Verificar si el usuario está logueado y es admin
if (!isset($_SESSION['usuario_id']) || empty($_SESSION['usuario_id']) || $_SESSION['rol'] !== 'admin') {
    header('Location: ../login.php');
    exit;
}

require_once '../includes/config.php';
require_once '../includes/db.php';
//require_once '../includes/theme_only.php'; 

$db = new Database();
$mensaje = '';
$cliente = null;

// Script para verificar y actualizar la estructura de la tabla
function actualizarEstructuraTabla($db) {
    try {
        // Verificar si la columna 'tipo_contribuyente' existe
        $stmt = $db->prepare("SHOW COLUMNS FROM clientes LIKE 'tipo_contribuyente'");
        $stmt->execute();
        $columnExists = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$columnExists) {
            // Añadir la columna tipo_contribuyente si no existe
            $stmt = $db->prepare("ALTER TABLE clientes ADD COLUMN `tipo_contribuyente` 
                ENUM('Unipersonal', 'Persona Jurídica', 'No Contribuyente') DEFAULT 'Unipersonal'");
            $stmt->execute();
            error_log("Columna 'tipo_contribuyente' añadida a la tabla clientes");
        }
        
        // Modificar las restricciones para campos obligatorios
        $stmt = $db->prepare("SHOW COLUMNS FROM clientes LIKE 'apellidos'");
        $stmt->execute();
        $apellidosColumn = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($apellidosColumn && strpos($apellidosColumn['Type'], 'NULL') !== false) {
            $db->exec("ALTER TABLE clientes MODIFY `apellidos` VARCHAR(100) NOT NULL");
            error_log("Campo 'apellidos' modificado a NOT NULL");
        }
        
        $stmt = $db->prepare("SHOW COLUMNS FROM clientes LIKE 'razon_social'");
        $stmt->execute();
        $razonSocialColumn = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($razonSocialColumn && strpos($razonSocialColumn['Type'], 'NULL') !== false) {
            $db->exec("ALTER TABLE clientes MODIFY `razon_social` VARCHAR(150) NOT NULL");
            error_log("Campo 'razon_social' modificado a NOT NULL");
        }
        
        $stmt = $db->prepare("SHOW COLUMNS FROM clientes LIKE 'email'");
        $stmt->execute();
        $emailColumn = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($emailColumn && strpos($emailColumn['Type'], 'NULL') !== false) {
            $db->exec("ALTER TABLE clientes MODIFY `email` VARCHAR(100) NOT NULL");
            error_log("Campo 'email' modificado a NOT NULL");
        }
        
        return true;
    } catch (PDOException $e) {
        error_log("Error al actualizar la estructura de la tabla: " . $e->getMessage());
        return false;
    }
}

// Ejecutar verificación de estructura de tabla
actualizarEstructuraTabla($db);

// Verificar si se proporcionó un ID
if (!isset($_GET['id'])) {
    $mensaje = '<div class="alert alert-danger">ID de cliente no proporcionado</div>';
} else {
    try {
        $stmt = $db->prepare("SELECT * FROM clientes WHERE id_cliente = :id");
        $stmt->bindParam(':id', $_GET['id'], PDO::PARAM_INT);
        $stmt->execute();
        $cliente = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if (!$cliente) {
            $mensaje = '<div class="alert alert-danger">Cliente no encontrado</div>';
        }
        
        // Si es un registro antiguo y no tiene tipo_contribuyente, asignar valor por defecto
        if ($cliente && !isset($cliente['tipo_contribuyente'])) {
            $cliente['tipo_contribuyente'] = 'Unipersonal';
        }
    } catch(PDOException $e) {
        $mensaje = '<div class="alert alert-danger">Error al obtener el cliente: ' . $e->getMessage() . '</div>';
    }
}

// Procesar formulario
if ($_SERVER["REQUEST_METHOD"] == "POST" && $cliente) {
    $campos = [
        'tipo_documento', 'numero_documento', 'nombre', 'apellidos', 'razon_social',
        'fecha_nacimiento', 'genero', 'direccion', 'codigo_postal', 'ciudad',
        'departamento', 'pais', 'telefono_principal', 'telefono_secundario',
        'email', 'hobbies', 'limite_credito', 'estado', 'notas',
        'preferencias_contacto', 'categoria', 'tipo_contribuyente'
    ];
    
    $valores = [];
    $params = [];
    
    foreach ($campos as $campo) {
        if (isset($_POST[$campo])) {
            // Manejo especial para campos que pueden ser NULL
            if (($campo === 'fecha_nacimiento' || 
                 $campo === 'genero' || 
                 $campo === 'hobbies') && empty($_POST[$campo])) {
                $valores[] = "$campo = NULL";
                continue; // Saltar al siguiente campo sin añadir parámetro
            }
            
            $valores[] = "$campo = :$campo";
            $params[":$campo"] = trim($_POST[$campo]);
        }
    }
    
    try {
        $sql = "UPDATE clientes SET " . implode(', ', $valores) . " WHERE id_cliente = :id_cliente";
        $stmt = $db->prepare($sql);
        $params[':id_cliente'] = $_GET['id'];
        
        if ($stmt->execute($params)) {
            // Modificar para usar JavaScript
            echo "<script>
                alert('Cliente actualizado exitosamente');
                window.location.href = 'clientes.php';
            </script>";
            exit;
        }
    } catch(PDOException $e) {
        $mensaje = '<div class="alert alert-danger">Error al actualizar el cliente: ' . $e->getMessage() . '</div>';
    }
}

// Obtener configuración
try {
    $stmt = $db->prepare("SELECT color_principal, color_secundario, favicon FROM configuracion LIMIT 1");
    $stmt->execute();
    $config = $stmt->fetch(PDO::FETCH_ASSOC);
    $colorPrincipal = $config['color_principal'] ?? '#007bff';
    $colorSecundario = $config['color_secundario'] ?? '#6c757d';
    $favicon = $config['favicon'] ?? '';
} catch(PDOException $e) {
    $colorPrincipal = '#007bff';
    $colorSecundario = '#6c757d';
    $favicon = '';
}
//echo getThemeCSS();
require_once '../includes/header.php';
?>
<!DOCTYPE html>
<html>
<head>
<?php
    // Modo oscuro
    require_once '../includes/dark_mode.php';
    ?>
    <meta name="color-scheme" content="light dark">
    <?php echo getDarkModeStyles(); ?>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Editar Cliente</title>
    <?php if (!empty($favicon)): ?>
    <link rel="shortcut icon" href="<?php echo SITE_URL . '/uploads/config/' . $favicon; ?>" type="image/x-icon">
    <?php endif; ?>
    <link rel="stylesheet" href="css/bootstrap.min.css">
    
    <script>
function calcularDigitoVerificador(ruc) {
    if (!ruc) return '';
    
    // Limpiar el RUC de cualquier carácter que no sea número
    ruc = ruc.replace(/\D/g, '');
    
    if (ruc.length < 6) return '';

    // Algoritmo para calcular el dígito verificador
    const baseMax = 11;
    let k = 2;
    let total = 0;

    // Iteramos de derecha a izquierda
    for (let i = ruc.length - 1; i >= 0; i--) {
        k = k > baseMax ? 2 : k;
        total += parseInt(ruc.charAt(i)) * k++;
    }

    let resto = total % 11;
    let digito = resto > 1 ? 11 - resto : 0;

    return digito;
}

document.addEventListener('DOMContentLoaded', function() {
    const tipoDocumento = document.querySelector('select[name="tipo_documento"]');
    const numeroDocumento = document.querySelector('input[name="numero_documento"]');
    
    function actualizarDocumento() {
        if (tipoDocumento.value === 'RUC') {
            let numero = numeroDocumento.value.split('-')[0]; // Obtener solo el número sin DV
            if (numero) {
                const dv = calcularDigitoVerificador(numero);
                numeroDocumento.value = `${numero}-${dv}`;
            }
        }
    }

    // Actualizar cuando cambia el tipo de documento
    tipoDocumento.addEventListener('change', function() {
        if (this.value === 'RUC') {
            actualizarDocumento();
        }
    });

    // Actualizar cuando se modifica el número de documento
    numeroDocumento.addEventListener('input', function() {
        if (tipoDocumento.value === 'RUC') {
            clearTimeout(this.timeout);
            this.timeout = setTimeout(() => {
                actualizarDocumento();
            }, 500);
        }
    });

    // Ejecutar al cargar la página si ya es RUC
    if (tipoDocumento.value === 'RUC') {
        actualizarDocumento();
    }
});
</script>
</head>
<body>
    <div class="container mt-5">
        <h2 class="titulo-principal">Editar Cliente</h2>
        
        <?php echo $mensaje; ?>
        
        <?php if ($cliente): ?>
        <form method="POST" action="" class="row g-3">
            <div class="col-md-4">
                <label class="form-label required-label">Número de Documento</label>
                <input type="text" name="numero_documento" class="form-control" required 
                       value="<?php echo htmlspecialchars($cliente['numero_documento']); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label required-label">Tipo de Documento</label>
                <select name="tipo_documento" class="form-control" required>
                    <?php 
                    $tipos = ['CI', 'RUC', 'DNI', 'NIE', 'Pasaporte', 'CIF'];
                    foreach ($tipos as $tipo): 
                        $selected = ($cliente['tipo_documento'] == $tipo) ? 'selected' : '';
                    ?>
                    <option value="<?php echo $tipo; ?>" <?php echo $selected; ?>><?php echo $tipo; ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <div class="col-md-4">
                <label class="form-label required-label">Tipo de Contribuyente</label>
                <div class="radio-group">
                    <div class="form-check">
                        <input class="form-check-input" type="radio" name="tipo_contribuyente" id="unipersonal" 
                               value="Unipersonal" <?php echo (($cliente['tipo_contribuyente'] ?? '') == 'Unipersonal') ? 'checked' : ''; ?> required>
                        <label class="form-check-label" for="unipersonal">Unipersonal</label>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="radio" name="tipo_contribuyente" id="personaJuridica" 
                               value="Persona Jurídica" <?php echo (($cliente['tipo_contribuyente'] ?? '') == 'Persona Jurídica') ? 'checked' : ''; ?>>
                        <label class="form-check-label" for="personaJuridica">Persona Jurídica</label>
                    </div>
                    <div class="form-check">
                        <input class="form-check-input" type="radio" name="tipo_contribuyente" id="noContribuyente" 
                               value="No Contribuyente" <?php echo (($cliente['tipo_contribuyente'] ?? '') == 'No Contribuyente') ? 'checked' : ''; ?>>
                        <label class="form-check-label" for="noContribuyente">No Contribuyente</label>
                    </div>
                </div>
            </div>

            <div class="col-md-4">
                <label class="form-label required-label">Nombre</label>
                <input type="text" name="nombre" class="form-control" required 
                       value="<?php echo htmlspecialchars($cliente['nombre']); ?>">
            </div>

            <!-- Campos personales -->
            <div class="col-md-4">
                <label class="form-label required-label">Apellidos</label>
                <input type="text" name="apellidos" class="form-control" required
                       value="<?php echo htmlspecialchars($cliente['apellidos'] ?? ''); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label required-label">Razón Social</label>
                <input type="text" name="razon_social" class="form-control" required
                       value="<?php echo htmlspecialchars($cliente['razon_social'] ?? ''); ?>">
            </div>

            <!-- Más campos personales -->
            <?php 
            // Formatear la fecha de nacimiento
            $fecha_nacimiento = '';
            if (!empty($cliente['fecha_nacimiento'])) {
                // Asegurarnos de que la fecha esté en el formato correcto
                $fecha = strtotime($cliente['fecha_nacimiento']);
                if ($fecha !== false) {
                    $fecha_nacimiento = date('Y-m-d', $fecha);
                }
                error_log('Fecha formateada: ' . $fecha_nacimiento); // Debug
            }
            ?>
            <div class="col-md-4">
                <label class="form-label">Fecha de Nacimiento</label>
                <input type="date" name="fecha_nacimiento" class="form-control" 
                       value="<?php echo $fecha_nacimiento; ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label">Género</label>
                <select name="genero" class="form-control">
                    <option value="">Seleccionar</option>
                    <?php 
                    $generos = ['M' => 'Masculino', 'F' => 'Femenino', 'Otro' => 'Otro'];
                    foreach ($generos as $key => $valor): 
                        $selected = ($cliente['genero'] == $key) ? 'selected' : '';
                    ?>
                    <option value="<?php echo $key; ?>" <?php echo $selected; ?>><?php echo $valor; ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <!-- Dirección -->
            <div class="col-12">
                <label class="form-label required-label">Dirección</label>
                <input type="text" name="direccion" class="form-control" required 
                       value="<?php echo htmlspecialchars($cliente['direccion']); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label">Código Postal</label>
                <input type="text" name="codigo_postal" class="form-control" 
                       value="<?php echo htmlspecialchars($cliente['codigo_postal'] ?? ''); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label">Ciudad</label>
                <input type="text" name="ciudad" class="form-control" 
                       value="<?php echo htmlspecialchars($cliente['ciudad'] ?? ''); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label">Departamento</label>
                <input type="text" name="departamento" class="form-control" 
                       value="<?php echo htmlspecialchars($cliente['departamento'] ?? ''); ?>">
            </div>

            <!-- Contacto -->
            <div class="col-md-6">
                <label class="form-label required-label">Teléfono Principal</label>
                <input type="tel" name="telefono_principal" class="form-control" required 
                       value="<?php echo htmlspecialchars($cliente['telefono_principal']); ?>">
            </div>

            <div class="col-md-6">
                <label class="form-label">Teléfono Secundario</label>
                <input type="tel" name="telefono_secundario" class="form-control" 
                       value="<?php echo htmlspecialchars($cliente['telefono_secundario'] ?? ''); ?>">
            </div>

            <div class="col-md-6">
                <label class="form-label required-label">Email</label>
                <input type="email" name="email" class="form-control" required
                       value="<?php echo htmlspecialchars($cliente['email'] ?? ''); ?>">
            </div>

            <!-- Información adicional -->
            <div class="col-md-6">
                <label class="form-label">Hobbies</label>
                <input type="text" name="hobbies" class="form-control" 
                       value="<?php echo htmlspecialchars($cliente['hobbies'] ?? ''); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label">Límite de Crédito</label>
                <input type="number" step="0.01" name="limite_credito" class="form-control" 
                       value="<?php echo htmlspecialchars($cliente['limite_credito']); ?>">
            </div>

            <div class="col-md-4">
                <label class="form-label">Estado</label>
                <select name="estado" class="form-control">
                    <?php 
                    $estados = ['Activo', 'Inactivo', 'Moroso'];
                    foreach ($estados as $estado): 
                        $selected = ($cliente['estado'] == $estado) ? 'selected' : '';
                    ?>
                    <option value="<?php echo $estado; ?>" <?php echo $selected; ?>><?php echo $estado; ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <div class="col-md-4">
                <label class="form-label">Categoría</label>
                <select name="categoria" class="form-control">
                    <?php 
                    $categorias = ['Normal', 'Premium', 'VIP'];
                    foreach ($categorias as $categoria): 
                        $selected = ($cliente['categoria'] == $categoria) ? 'selected' : '';
                    ?>
                    <option value="<?php echo $categoria; ?>" <?php echo $selected; ?>><?php echo $categoria; ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <div class="col-12">
                <label class="form-label">Notas</label>
                <textarea name="notas" class="form-control"><?php echo htmlspecialchars($cliente['notas'] ?? ''); ?></textarea>
            </div>

            <div class="col-md-6">
                <label class="form-label">Preferencias de Contacto</label>
                <select name="preferencias_contacto" class="form-control">
                    <?php 
                    $preferencias = ['Email', 'Teléfono', 'SMS', 'WhatsApp'];
                    foreach ($preferencias as $preferencia): 
                        $selected = ($cliente['preferencias_contacto'] == $preferencia) ? 'selected' : '';
                    ?>
                    <option value="<?php echo $preferencia; ?>" <?php echo $selected; ?>><?php echo $preferencia; ?></option>
                    <?php endforeach; ?>
                </select>
            </div>

            <div class="col-12 mt-3">
                <button type="submit" class="btn" style="background-color: <?php echo $colorPrincipal; ?>; color: white;">
                    <span class="icon-wrapper"><?php echo file_get_contents('icons/check-circle.svg'); ?></span> 
                    Guardar Cambios
                </button>
                <a href="clientes.php" class="btn btn-custom-secondary">
                    <span class="icon-wrapper"><?php echo file_get_contents('icons/arrow-left.svg'); ?></span>
                    Volver
                </a>
            </div>
        </form>
        <?php endif; ?>
    </div>
</body>
</html>
