<?php
// ===================================
// ARCHIVO: register.php
// Sistema de registro para comercios
// ===================================

$page_title = "Registro de Comercio";
$page_description = "Solicite acceso a nuestra plataforma mayorista";
$breadcrumbs = [
    ['label' => 'Registro']
];
$additional_css = ['assets/css/forms.css'];

require_once 'config/session.php';
debugSession('Register');

require_once 'config/database.php';
require_once 'includes/functions.php';

$errors = [];
$success = false;

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Sanitizar y validar datos
    $email = filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL);
    $password = $_POST['password'];
    $confirm_password = $_POST['confirm_password'];
    $business_name = trim($_POST['business_name']);
    $business_type = $_POST['business_type'];
    $tax_id = preg_replace('/[^0-9\-]/', '', $_POST['tax_id']); // Solo números y guiones
    $contact_name = trim($_POST['contact_name']);
    $phone = trim($_POST['phone']);
    $address = trim($_POST['address']);
    $city = trim($_POST['city']);
    $province = $_POST['province'];
    $postal_code = trim($_POST['postal_code']);
    
    // Validaciones
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = "Email inválido";
    }
    
    if (strlen($password) < 8) {
        $errors[] = "La contraseña debe tener al menos 8 caracteres";
    }
    
    if ($password !== $confirm_password) {
        $errors[] = "Las contraseñas no coinciden";
    }
    
    if (empty($business_name) || strlen($business_name) < 3) {
        $errors[] = "Nombre del comercio requerido (mínimo 3 caracteres)";
    }
    
    if (!in_array($business_type, ['retail', 'wholesale', 'online'])) {
        $errors[] = "Tipo de comercio inválido";
    }
    
    if (!validateCUIT($tax_id)) {
        $errors[] = "CUIT inválido";
    }
    
    if (empty($contact_name)) {
        $errors[] = "Nombre de contacto requerido";
    }
    
    if (empty($phone)) {
        $errors[] = "Teléfono requerido";
    }
    
    if (empty($address) || empty($city)) {
        $errors[] = "Dirección completa requerida";
    }
    
    // Verificar si el email ya existe
    if (empty($errors)) {
        $stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
        $stmt->execute([$email]);
        if ($stmt->fetch()) {
            $errors[] = "Este email ya está registrado";
        }
    }
    
    // Verificar si el CUIT ya existe
    if (empty($errors)) {
        $stmt = $pdo->prepare("SELECT id FROM users WHERE tax_id = ?");
        $stmt->execute([$tax_id]);
        if ($stmt->fetch()) {
            $errors[] = "Este CUIT ya está registrado";
        }
    }
    
    // Si no hay errores, registrar usuario
    if (empty($errors)) {
        try {
            $password_hash = password_hash($password, PASSWORD_DEFAULT);
            
            $stmt = $pdo->prepare("
                INSERT INTO users (
                    email, password_hash, business_name, business_type, tax_id,
                    contact_name, phone, address, city, province, postal_code
                ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
            ");
            
            $stmt->execute([
                $email, $password_hash, $business_name, $business_type, $tax_id,
                $contact_name, $phone, $address, $city, $province, $postal_code
            ]);
            
            $user_id = $pdo->lastInsertId();
            
            // Enviar email al admin
            sendAdminNotification($user_id, $business_name, $email);
            
            $success = true;
            
        } catch (PDOException $e) {
            $errors[] = "Error al registrar usuario. Intente nuevamente.";
            error_log("Registration error: " . $e->getMessage());
        }
    }
}

$provinces = [
    'CABA' => 'Ciudad Autónoma de Buenos Aires',
    'BA' => 'Buenos Aires',
    'CAT' => 'Catamarca',
    'CHA' => 'Chaco',
    'CHU' => 'Chubut',
    'CBA' => 'Córdoba',
    'COR' => 'Corrientes',
    'ER' => 'Entre Ríos',
    'FOR' => 'Formosa',
    'JUJ' => 'Jujuy',
    'LP' => 'La Pampa',
    'LR' => 'La Rioja',
    'MEN' => 'Mendoza',
    'MIS' => 'Misiones',
    'NQN' => 'Neuquén',
    'RN' => 'Río Negro',
    'SAL' => 'Salta',
    'SJ' => 'San Juan',
    'SL' => 'San Luis',
    'SC' => 'Santa Cruz',
    'SF' => 'Santa Fe',
    'SDE' => 'Santiago del Estero',
    'TDF' => 'Tierra del Fuego',
    'TUC' => 'Tucumán'
];

require_once 'includes/header.php';
?>

<main class="main-content">
    <div class="container">
        <div class="form-container">
            <div class="form-header">
                <h1>📝 Registro de Comercio</h1>
                <p class="form-description">
                    Complete el formulario para solicitar acceso a nuestra plataforma mayorista. 
                    Su registro será revisado y aprobado manualmente por nuestro equipo.
                </p>
            </div>

            <?php if ($success): ?>
                <div class="success-message">
                    <div class="success-icon">✅</div>
                    <h3>¡Registro exitoso!</h3>
                    <p>Su solicitud ha sido enviada correctamente. Nuestro equipo revisará la información y se contactará con usted para confirmar el acceso a la plataforma.</p>
                    <p>Recibirá un email de confirmación una vez que su cuenta sea aprobada.</p>
                    <div class="success-actions">
                        <a href="index.php" class="btn btn-primary">Volver al inicio</a>
                        <a href="login.php" class="btn btn-secondary">Iniciar sesión</a>
                    </div>
                </div>
            <?php else: ?>

                <?php if (!empty($errors)): ?>
                    <div class="alert alert-error">
                        <h4>⚠️ Errores encontrados:</h4>
                        <ul>
                            <?php foreach ($errors as $error): ?>
                                <li><?php echo htmlspecialchars($error); ?></li>
                            <?php endforeach; ?>
                        </ul>
                    </div>
                <?php endif; ?>

                <form method="POST" action="register.php" class="registration-form" id="registrationForm">
                    <fieldset class="form-section">
                        <legend>🔐 Datos de acceso</legend>
                        
                        <div class="form-group">
                            <label for="email">Email *</label>
                            <input type="email" id="email" name="email" required 
                                   value="<?php echo htmlspecialchars($_POST['email'] ?? ''); ?>"
                                   placeholder="contacto@micomercio.com">
                            <small class="help-text">Este será su usuario para acceder a la plataforma</small>
                        </div>
                        
                        <div class="form-row">
                            <div class="form-group">
                                <label for="password">Contraseña *</label>
                                <input type="password" id="password" name="password" required 
                                       minlength="8" placeholder="Mínimo 8 caracteres">
                                <div class="password-strength" id="passwordStrength"></div>
                            </div>
                            
                            <div class="form-group">
                                <label for="confirm_password">Confirmar contraseña *</label>
                                <input type="password" id="confirm_password" name="confirm_password" required>
                                <div class="password-match" id="passwordMatch"></div>
                            </div>
                        </div>
                    </fieldset>

                    <fieldset class="form-section">
                        <legend>🏢 Datos del comercio</legend>
                        
                        <div class="form-group">
                            <label for="business_name">Nombre del comercio *</label>
                            <input type="text" id="business_name" name="business_name" required 
                                   value="<?php echo htmlspecialchars($_POST['business_name'] ?? ''); ?>"
                                   placeholder="Calzados San Martín">
                            <small class="help-text">Nombre completo como figura en AFIP</small>
                        </div>
                        
                        <div class="form-row">
                            <div class="form-group">
                                <label for="business_type">Tipo de comercio *</label>
                                <select id="business_type" name="business_type" required>
                                    <option value="">Seleccione...</option>
                                    <option value="retail" <?php echo ($_POST['business_type'] ?? '') === 'retail' ? 'selected' : ''; ?>>
                                        🏪 Minorista (venta al público)
                                    </option>
                                    <option value="wholesale" <?php echo ($_POST['business_type'] ?? '') === 'wholesale' ? 'selected' : ''; ?>>
                                        📦 Mayorista (reventa)
                                    </option>
                                    <option value="online" <?php echo ($_POST['business_type'] ?? '') === 'online' ? 'selected' : ''; ?>>
                                        💻 E-commerce
                                    </option>
                                </select>
                            </div>
                            
                            <div class="form-group">
                                <label for="tax_id">CUIT *</label>
                                <input type="text" id="tax_id" name="tax_id" required 
                                       value="<?php echo htmlspecialchars($_POST['tax_id'] ?? ''); ?>"
                                       placeholder="20-12345678-9" maxlength="13"
                                       pattern="\d{2}-\d{8}-\d{1}">
                                <small class="help-text">Formato: 20-12345678-9</small>
                            </div>
                        </div>
                    </fieldset>

                    <fieldset class="form-section">
                        <legend>👤 Datos de contacto</legend>
                        
                        <div class="form-group">
                            <label for="contact_name">Nombre de contacto *</label>
                            <input type="text" id="contact_name" name="contact_name" required 
                                   value="<?php echo htmlspecialchars($_POST['contact_name'] ?? ''); ?>"
                                   placeholder="Juan Pérez">
                            <small class="help-text">Persona responsable del comercio</small>
                        </div>
                        
                        <div class="form-group">
                            <label for="phone">Teléfono *</label>
                            <input type="tel" id="phone" name="phone" required 
                                   value="<?php echo htmlspecialchars($_POST['phone'] ?? ''); ?>"
                                   placeholder="+54 11 1234-5678">
                            <small class="help-text">Incluya código de área. Será usado para verificación</small>
                        </div>
                        
                        <div class="form-group">
                            <label for="address">Dirección *</label>
                            <input type="text" id="address" name="address" required 
                                   value="<?php echo htmlspecialchars($_POST['address'] ?? ''); ?>"
                                   placeholder="Av. Corrientes 1234">
                        </div>
                        
                        <div class="form-row">
                            <div class="form-group">
                                <label for="city">Ciudad *</label>
                                <input type="text" id="city" name="city" required 
                                       value="<?php echo htmlspecialchars($_POST['city'] ?? ''); ?>"
                                       placeholder="Buenos Aires">
                            </div>
                            
                            <div class="form-group">
                                <label for="province">Provincia *</label>
                                <select id="province" name="province" required>
                                    <option value="">Seleccione...</option>
                                    <?php foreach ($provinces as $code => $name): ?>
                                        <option value="<?php echo $code; ?>" 
                                                <?php echo ($_POST['province'] ?? '') === $code ? 'selected' : ''; ?>>
                                            <?php echo $name; ?>
                                        </option>
                                    <?php endforeach; ?>
                                </select>
                            </div>
                            
                            <div class="form-group">
                                <label for="postal_code">Código postal</label>
                                <input type="text" id="postal_code" name="postal_code" 
                                       value="<?php echo htmlspecialchars($_POST['postal_code'] ?? ''); ?>"
                                       placeholder="1414">
                            </div>
                        </div>
                    </fieldset>

                    <div class="form-notice">
                        <div class="notice-icon">ℹ️</div>
                        <div class="notice-content">
                            <h4>Proceso de aprobación</h4>
                            <ul>
                                <li>✓ Su registro será revisado manualmente por nuestro equipo</li>
                                <li>✓ Nos pondremos en contacto telefónicamente para verificar los datos</li>
                                <li>✓ El proceso de aprobación toma entre 24-48 horas hábiles</li>
                                <li>✓ Una vez aprobado, tendrá acceso a precios mayoristas exclusivos</li>
                            </ul>
                        </div>
                    </div>

                    <div class="form-actions">
                        <button type="submit" class="btn btn-primary btn-large" id="submitBtn">
                            📝 Solicitar registro
                        </button>
                        <a href="index.php" class="btn btn-secondary">Cancelar</a>
                    </div>

                    <div class="form-footer">
                        <p>¿Ya tiene cuenta? <a href="login.php">Iniciar sesión</a></p>
                    </div>
                </form>

            <?php endif; ?>
        </div>
    </div>
</main>

<style>
.form-container {
    max-width: 800px;
    margin: 2rem auto;
    background: white;
    border-radius: 12px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    overflow: hidden;
}

.form-header {
    background: linear-gradient(135deg, #27ae60, #2ecc71);
    color: white;
    padding: 2rem;
    text-align: center;
}

.form-header h1 {
    margin: 0 0 1rem 0;
    font-size: 2rem;
}

.form-description {
    margin: 0;
    opacity: 0.9;
    line-height: 1.6;
}

.success-message {
    padding: 3rem 2rem;
    text-align: center;
}

.success-icon {
    font-size: 4rem;
    margin-bottom: 1rem;
}

.success-message h3 {
    color: #27ae60;
    margin-bottom: 1rem;
}

.success-message p {
    color: #2c3e50;
    margin-bottom: 1rem;
    line-height: 1.6;
}

.success-actions {
    display: flex;
    gap: 1rem;
    justify-content: center;
    margin-top: 2rem;
    flex-wrap: wrap;
}

.registration-form {
    padding: 2rem;
}

.form-section {
    border: 2px solid #ecf0f1;
    border-radius: 8px;
    padding: 1.5rem;
    margin-bottom: 2rem;
    background: #fafbfc;
}

.form-section legend {
    padding: 0 1rem;
    font-weight: 600;
    color: #2c3e50;
    background: white;
    border-radius: 4px;
}

.form-group {
    margin-bottom: 1.5rem;
}

.form-row {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 1rem;
}

.form-group label {
    display: block;
    margin-bottom: 0.5rem;
    font-weight: 500;
    color: #2c3e50;
}

.form-group input,
.form-group select {
    width: 100%;
    padding: 0.75rem;
    border: 2px solid #ecf0f1;
    border-radius: 6px;
    font-size: 1rem;
    transition: border-color 0.3s ease;
    box-sizing: border-box;
}

.form-group input:focus,
.form-group select:focus {
    outline: none;
    border-color: #3498db;
    box-shadow: 0 0 0 3px rgba(52, 152, 219, 0.1);
}

.help-text {
    display: block;
    margin-top: 0.25rem;
    color: #7f8c8d;
    font-size: 0.85rem;
}

.password-strength,
.password-match {
    margin-top: 0.5rem;
    font-size: 0.85rem;
    padding: 0.25rem 0;
}

.password-strength.weak { color: #e74c3c; }
.password-strength.medium { color: #f39c12; }
.password-strength.strong { color: #27ae60; }

.password-match.valid { color: #27ae60; }
.password-match.invalid { color: #e74c3c; }

.form-notice {
    background: #e8f4fd;
    border-left: 4px solid #3498db;
    border-radius: 0 8px 8px 0;
    padding: 1.5rem;
    margin: 2rem 0;
    display: flex;
    gap: 1rem;
}

.notice-icon {
    font-size: 1.5rem;
    flex-shrink: 0;
}

.notice-content h4 {
    margin: 0 0 0.5rem 0;
    color: #2980b9;
}

.notice-content ul {
    margin: 0;
    padding-left: 1.5rem;
}

.notice-content li {
    margin-bottom: 0.25rem;
    color: #2c3e50;
}

.form-actions {
    display: flex;
    gap: 1rem;
    justify-content: center;
    margin: 2rem 0;
    flex-wrap: wrap;
}

.btn-large {
    padding: 1rem 2rem;
    font-size: 1.1rem;
    font-weight: 600;
}

.form-footer {
    text-align: center;
    padding-top: 1.5rem;
    border-top: 1px solid #ecf0f1;
}

.form-footer a {
    color: #3498db;
    text-decoration: none;
    font-weight: 500;
}

.form-footer a:hover {
    text-decoration: underline;
}

/* Input validation states */
.form-group input.valid {
    border-color: #27ae60;
    box-shadow: 0 0 0 3px rgba(39, 174, 96, 0.1);
}

.form-group input.invalid {
    border-color: #e74c3c;
    box-shadow: 0 0 0 3px rgba(231, 76, 60, 0.1);
}

.input-error {
    color: #e74c3c;
    font-size: 0.85rem;
    margin-top: 0.25rem;
    display: block;
}

/* Responsive */
@media (max-width: 768px) {
    .form-container {
        margin: 1rem;
    }
    
    .form-header {
        padding: 1.5rem;
    }
    
    .registration-form {
        padding: 1.5rem;
    }
    
    .form-row {
        grid-template-columns: 1fr;
    }
    
    .success-actions {
        flex-direction: column;
    }
    
    .form-actions {
        flex-direction: column;
    }
}
</style>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const form = document.getElementById('registrationForm');
    const submitBtn = document.getElementById('submitBtn');
    const passwordInput = document.getElementById('password');
    const confirmPasswordInput = document.getElementById('confirm_password');
    const emailInput = document.getElementById('email');
    const taxIdInput = document.getElementById('tax_id');
    
    // Validación de contraseña en tiempo real
    passwordInput.addEventListener('input', function() {
        validatePasswordStrength(this.value);
        if (confirmPasswordInput.value) {
            validatePasswordMatch();
        }
    });
    
    confirmPasswordInput.addEventListener('input', validatePasswordMatch);
    
    // Validación de email
    emailInput.addEventListener('blur', function() {
        validateEmail(this);
    });
    
    // Formateo automático de CUIT
    taxIdInput.addEventListener('input', function() {
        formatCUIT(this);
        validateCUIT(this);
    });
    
    // Validación del formulario al enviar
    form.addEventListener('submit', function(e) {
        if (!validateForm()) {
            e.preventDefault();
            return false;
        }
        
        // Mostrar estado de carga
        submitBtn.disabled = true;
        submitBtn.innerHTML = '⏳ Enviando registro...';
        submitBtn.style.background = '#95a5a6';
    });
    
    function validatePasswordStrength(password) {
        const strengthIndicator = document.getElementById('passwordStrength');
        let strength = 0;
        let feedback = '';
        
        if (password.length >= 8) strength++;
        if (/[a-z]/.test(password)) strength++;
        if (/[A-Z]/.test(password)) strength++;
        if (/[0-9]/.test(password)) strength++;
        if (/[^a-zA-Z0-9]/.test(password)) strength++;
        
        if (password.length === 0) {
            strengthIndicator.textContent = '';
            strengthIndicator.className = 'password-strength';
        } else if (strength < 2) {
            feedback = '🔴 Contraseña débil - Agregue mayúsculas, números o símbolos';
            strengthIndicator.className = 'password-strength weak';
        } else if (strength < 4) {
            feedback = '🟡 Contraseña media - Puede mejorarla';
            strengthIndicator.className = 'password-strength medium';
        } else {
            feedback = '🟢 Contraseña fuerte';
            strengthIndicator.className = 'password-strength strong';
        }
        
        strengthIndicator.textContent = feedback;
    }
    
    function validatePasswordMatch() {
        const matchIndicator = document.getElementById('passwordMatch');
        const password = passwordInput.value;
        const confirmPassword = confirmPasswordInput.value;
        
        if (confirmPassword === '') {
            matchIndicator.textContent = '';
            matchIndicator.className = 'password-match';
        } else if (password === confirmPassword) {
            matchIndicator.textContent = '✓ Las contraseñas coinciden';
            matchIndicator.className = 'password-match valid';
        } else {
            matchIndicator.textContent = '✗ Las contraseñas no coinciden';
            matchIndicator.className = 'password-match invalid';
        }
    }
    
    function validateEmail(input) {
        const email = input.value.trim();
        const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        
        if (email && !emailRegex.test(email)) {
            input.classList.add('invalid');
            input.classList.remove('valid');
            showInputError(input, 'Email inválido');
            return false;
        } else if (email) {
            input.classList.add('valid');
            input.classList.remove('invalid');
            clearInputError(input);
            return true;
        }
        
        input.classList.remove('valid', 'invalid');
        clearInputError(input);
        return true;
    }
    
    function formatCUIT(input) {
        let value = input.value.replace(/[^0-9]/g, '');
        
        if (value.length >= 11) {
            value = value.substring(0, 11);
            value = value.replace(/(\d{2})(\d{8})(\d{1})/, '$1-$2-$3');
        }
        
        input.value = value;
    }
    
    function validateCUIT(input) {
        const cuit = input.value.replace(/[^0-9]/g, '');
        
        if (cuit.length === 11) {
            if (isValidCUIT(cuit)) {
                input.classList.add('valid');
                input.classList.remove('invalid');
                clearInputError(input);
            } else {
                input.classList.add('invalid');
                input.classList.remove('valid');
                showInputError(input, 'CUIT inválido');
            }
        } else if (cuit.length > 0) {
            input.classList.add('invalid');
            input.classList.remove('valid');
            showInputError(input, 'CUIT debe tener 11 dígitos');
        } else {
            input.classList.remove('valid', 'invalid');
            clearInputError(input);
        }
    }
    
    function isValidCUIT(cuit) {
        if (cuit.length !== 11) return false;
        
        const multipliers = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2];
        let sum = 0;
        
        for (let i = 0; i < 10; i++) {
            sum += parseInt(cuit[i]) * multipliers[i];
        }
        
        const remainder = sum % 11;
        const verifier = remainder < 2 ? remainder : 11 - remainder;
        
        return verifier === parseInt(cuit[10]);
    }
    
    function validateForm() {
        let isValid = true;
        const requiredFields = form.querySelectorAll('[required]');
        
        requiredFields.forEach(field => {
            if (!field.value.trim()) {
                showInputError(field, 'Este campo es requerido');
                field.classList.add('invalid');
                isValid = false;
            }
        });
        
        // Validaciones específicas
        if (!validateEmail(emailInput)) isValid = false;
        if (passwordInput.value !== confirmPasswordInput.value) isValid = false;
        if (passwordInput.value.length < 8) isValid = false;
        
        const cuit = taxIdInput.value.replace(/[^0-9]/g, '');
        if (!isValidCUIT(cuit)) isValid = false;
        
        return isValid;
    }
    
    function showInputError(input, message) {
        clearInputError(input);
        
        const errorDiv = document.createElement('span');
        errorDiv.className = 'input-error';
        errorDiv.textContent = message;
        
        input.parentNode.appendChild(errorDiv);
    }
    
    function clearInputError(input) {
        const existingError = input.parentNode.querySelector('.input-error');
        if (existingError) {
            existingError.remove();
        }
    }
    
    // Limpiar errores al escribir
    form.addEventListener('input', function(e) {
        if (e.target.classList.contains('invalid')) {
            e.target.classList.remove('invalid');
            clearInputError(e.target);
        }
    });
});
</script>

<?php require_once 'includes/footer.php'; ?>