<?php
require_once __DIR__ . '/../../includes/layout.php';

$pdo = getDBConnection();
$sucursal_id = (int)($_GET['sucursal_id'] ?? 1);
$message = '';
$alertClass = 'msg-ok';

// Auto-run migration
try {
    $pdo->exec("CREATE TABLE IF NOT EXISTS `laboratorio_margenes` (
      `id` INT AUTO_INCREMENT PRIMARY KEY,
      `laboratorio` VARCHAR(100) NOT NULL UNIQUE,
      `margen_ganancia_porcentaje` DECIMAL(5,2) NOT NULL,
      `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci");
    try {
        $pdo->query("SELECT descuento_colaborador_porcentaje FROM sucursal_configuracion LIMIT 1");
    } catch (Exception $colEx) {
        $pdo->exec("ALTER TABLE `sucursal_configuracion` ADD COLUMN `descuento_colaborador_porcentaje` DECIMAL(5,2) NOT NULL DEFAULT 10.00");
    }
} catch (Exception $e) {
    $message = "Error de migración: " . $e->getMessage();
    $alertClass = 'msg-err';
}

// Procesar formularios
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (isset($_POST['save_general'])) {
        $gastos = $_POST['gastos_fijos'] ?? 0;
        $dias = $_POST['dias_mes'] ?? 30;
        $margen = $_POST['margen_defecto'] ?? 30;
        $moneda = $_POST['moneda'] ?? 'Q';
        $descuentoColab = $_POST['descuento_colaborador'] ?? 10.00;
        try {
            $stmt = $pdo->prepare("INSERT INTO sucursal_configuracion (sucursal_id, gastos_fijos_mensuales, dias_operativos_mes, margen_ganancia_defecto, moneda_simbolo, descuento_colaborador_porcentaje) 
                VALUES (?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE 
                gastos_fijos_mensuales = VALUES(gastos_fijos_mensuales), dias_operativos_mes = VALUES(dias_operativos_mes),
                margen_ganancia_defecto = VALUES(margen_ganancia_defecto), moneda_simbolo = VALUES(moneda_simbolo),
                descuento_colaborador_porcentaje = VALUES(descuento_colaborador_porcentaje)");
            $stmt->execute([$sucursal_id, $gastos, $dias, $margen, $moneda, $descuentoColab]);
            $message = "Configuración general guardada.";
        } catch (Exception $e) { $message = "Error: " . $e->getMessage(); $alertClass = 'msg-err'; }
    }
    if (isset($_POST['delete_margin_id'])) {
        $pdo->prepare("DELETE FROM laboratorio_margenes WHERE id=?")->execute([intval($_POST['delete_margin_id'])]);
        $message = "Margen eliminado.";
    }
}

// Obtener configuración actual
$stmtConfig = $pdo->prepare("SELECT * FROM sucursal_configuracion WHERE sucursal_id = ?");
$stmtConfig->execute([$sucursal_id]);
$config = $stmtConfig->fetch();
if (!$config) {
    $config = ['gastos_fijos_mensuales' => 0, 'dias_operativos_mes' => 30, 'margen_ganancia_defecto' => 30, 'moneda_simbolo' => 'Q', 'descuento_colaborador_porcentaje' => 10];
}

// Laboratorios disponibles
$labsDisponibles = $pdo->query("SELECT DISTINCT laboratorio FROM productos WHERE laboratorio IS NOT NULL AND laboratorio != '' AND estado=1 ORDER BY laboratorio")->fetchAll();

// Márgenes por laboratorio ya guardados
$margenes_lab = $pdo->query("SELECT * FROM laboratorio_margenes ORDER BY laboratorio")->fetchAll();
$labMargenados = array_column($margenes_lab, 'laboratorio');
$labsSinMargen = array_filter($labsDisponibles, function($l) use ($labMargenados) { return !in_array($l['laboratorio'], $labMargenados); });

renderHeader('Configuración', 'configuracion');
?>

<style>
.cfg-wrap { max-width: 960px; margin: 0 auto; padding: 1.5rem; }
.cfg-section { background: var(--surface-card); border: 1px solid var(--border-color); border-radius: 1rem; padding: 1.5rem; margin-bottom: 1.5rem; }
.cfg-section > h2 { font-size: 1.1rem; font-weight: 700; margin: 0 0 0.25rem 0; display: flex; align-items: center; gap: 0.5rem; }
.cfg-section > p.section-desc { font-size: 0.8rem; color: var(--text-secondary); margin: 0.25rem 0 1.25rem 0; padding-bottom: 0.75rem; border-bottom: 2px solid var(--border-color); }
.form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; margin-bottom: 1rem; }
.form-group { display: flex; flex-direction: column; gap: 0.25rem; }
.form-group label { font-size: 0.8rem; font-weight: 600; color: var(--text-secondary); }
.form-group .field-help { font-size: 0.7rem; color: var(--text-muted); line-height: 1.3; }
.form-group input, .form-group select { padding: 0.6rem 0.75rem; border-radius: 0.75rem; border: 1px solid var(--border-color); background: var(--surface-card); color: var(--text-primary); font-size: 0.875rem; transition: border-color .15s; }
.form-group input:focus { outline: none; border-color: var(--accent-color); box-shadow: 0 0 0 3px rgba(99,102,241,.15); }
.btn-save { padding: 0.65rem 1.5rem; background: var(--accent-color); color: white; border: none; border-radius: 0.75rem; font-weight: 700; cursor: pointer; font-size: 0.875rem; display: inline-flex; align-items: center; gap: 0.4rem; }
.btn-save:hover { opacity: 0.9; }
.btn-danger { background: #fee2e2; color: #dc2626; border: none; border-radius: 0.5rem; padding: 0.35rem 0.7rem; cursor: pointer; font-size: 0.75rem; font-weight: 600; transition: background .15s; }
.btn-danger:hover { background: #fecaca; }
.msg { padding: 0.75rem 1rem; border-radius: 0.75rem; margin-bottom: 1rem; font-weight: 600; font-size: 0.875rem; }
.msg-ok { background: #d1fae5; color: #065f46; }
.msg-err { background: #fee2e2; color: #991b1b; }
.lab-row { display: flex; align-items: center; justify-content: space-between; padding: 0.6rem 0; border-bottom: 1px solid var(--border-color); }
.lab-row:last-child { border-bottom: none; }
.lab-row .lab-name { font-weight: 600; font-size: 0.875rem; min-width: 0; flex: 1; }
.lab-row .lab-input { width: 90px; text-align: center; padding: 0.4rem 0.5rem; border-radius: 0.5rem; border: 1px solid var(--border-color); font-size: 0.85rem; }
.lab-row .lab-input:focus { outline: none; border-color: var(--accent-color); }
.lab-default { font-size: 0.75rem; color: var(--text-muted); margin-left: 0.5rem; }
.add-lab-bar { display: flex; gap: 0.5rem; margin-top: 1rem; align-items: center; flex-wrap: wrap; }
.add-lab-bar select { padding: 0.5rem 0.75rem; border-radius: 0.75rem; border: 1px solid var(--border-color); background: var(--surface-card); color: var(--text-primary); font-size: 0.85rem; min-width: 200px; }
.add-lab-bar select:focus { outline: none; border-color: var(--accent-color); }
</style>

<div class="cfg-wrap">
    <div style="display:flex;align-items:center;gap:0.75rem;margin-bottom:0.25rem">
        <div style="width:40px;height:40px;border-radius:12px;background:linear-gradient(135deg,#6366f1,#8b5cf6);display:flex;align-items:center;justify-content:center;color:#fff;font-size:1.2rem"><i class="bi bi-gear-fill"></i></div>
        <div>
            <h1 style="font-size:1.35rem;font-weight:800;margin:0">Configuración del Sistema</h1>
            <p style="font-size:0.8rem;color:var(--text-secondary);margin:0">Parámetros generales y márgenes de ganancia por laboratorio</p>
        </div>
    </div>

    <?php if ($message): ?>
        <div class="msg <?= $alertClass ?>"><i class="bi <?= $alertClass === 'msg-ok' ? 'bi-check-circle-fill' : 'bi-exclamation-circle-fill' ?>"></i> <?= htmlspecialchars($message) ?></div>
    <?php endif; ?>

    <!-- Parámetros Generales -->
    <div class="cfg-section">
        <h2><i class="bi bi-sliders"></i> Parámetros Generales</h2>
        <p class="section-desc">Estos valores se usan en los cálculos del sistema (precios, reportes, descuentos).</p>
        <form method="POST">
            <div class="form-grid">
                <div class="form-group">
                    <label>Gastos Fijos Mensuales</label>
                    <input type="number" name="gastos_fijos" step="0.01" value="<?= $config['gastos_fijos_mensuales'] ?>">
                    <span class="field-help">Costo operativo mensual estimado (alquiler, salarios, servicios). Se usa en BI para calcular punto de equilibrio.</span>
                </div>
                <div class="form-group">
                    <label>Días Operativos por Mes</label>
                    <input type="number" name="dias_mes" value="<?= $config['dias_operativos_mes'] ?>">
                    <span class="field-help">Días laborales al mes. Se usa para calcular costo operativo diario y rentabilidad por día.</span>
                </div>
                <div class="form-group">
                    <label>Margen de Ganancia Default</label>
                    <input type="number" name="margen_defecto" step="0.01" value="<?= $config['margen_ganancia_defecto'] ?>">
                    <span class="field-help">Porcentaje de ganancia que se aplica al costo para calcular precio de venta cuando no hay margen específico por laboratorio.</span>
                </div>
                <div class="form-group">
                    <label>Símbolo de Moneda</label>
                    <input type="text" name="moneda" maxlength="5" value="<?= htmlspecialchars($config['moneda_simbolo']) ?>">
                    <span class="field-help">Símbolo que aparece junto a los precios en todo el sistema (ej. Q, $, S/.).</span>
                </div>
                <div class="form-group">
                    <label>Descuento para Colaboradores</label>
                    <input type="number" name="descuento_colaborador" step="0.01" value="<?= $config['descuento_colaborador_porcentaje'] ?>">
                    <span class="field-help">Porcentaje de descuento fijo que se aplica automáticamente en ventas a empleados.</span>
                </div>
            </div>
            <button type="submit" name="save_general" class="btn-save"><i class="bi bi-floppy"></i> Guardar Parámetros</button>
        </form>
    </div>

    <!-- Márgenes por Laboratorio -->
    <div class="cfg-section">
        <h2><i class="bi bi-building"></i> Márgenes por Laboratorio</h2>
        <p class="section-desc">Define márgenes específicos para laboratorios. Si no se define, se usa el margen default (<strong><?= $config['margen_ganancia_defecto'] ?>%</strong>). Al guardar se recalculan los precios de venta de todos los productos del laboratorio <span style="color:var(--text-muted)">(precio = costo × (1 + margen%) )</span>.</p>

        <div id="labMargenes">
            <?php if (count($margenes_lab) === 0 && count($labsSinMargen) === 0): ?>
                <p style="text-align:center;padding:2rem 0;color:var(--text-muted);font-size:0.9rem"><i class="bi bi-inbox"></i> No hay laboratorios registrados en productos.</p>
            <?php else: ?>
                <?php foreach ($margenes_lab as $ml): ?>
                <div class="lab-row" data-lab="<?= htmlspecialchars($ml['laboratorio']) ?>">
                    <div class="lab-name"><?= htmlspecialchars($ml['laboratorio']) ?></div>
                    <div style="display:flex;align-items:center;gap:0.5rem">
                        <input type="number" step="0.01" class="lab-input" value="<?= $ml['margen_ganancia_porcentaje'] ?>" data-edit="<?= $ml['id'] ?>" data-original="<?= $ml['margen_ganancia_porcentaje'] ?>">
                        <span class="lab-default">%</span>
                        <form method="POST" style="display:inline" onsubmit="return confirm('¿Eliminar margen para <?= addslashes($ml['laboratorio']) ?>?')">
                            <input type="hidden" name="delete_margin_id" value="<?= $ml['id'] ?>">
                            <button type="submit" class="btn-danger"><i class="bi bi-x-lg"></i></button>
                        </form>
                    </div>
                </div>
                <?php endforeach; ?>
                <?php if (count($labsSinMargen) > 0): ?>
                <div class="add-lab-bar">
                    <select id="newLabSelect">
                        <option value="">+ Agregar laboratorio...</option>
                        <?php foreach ($labsSinMargen as $l): ?>
                        <option value="<?= htmlspecialchars($l['laboratorio']) ?>"><?= htmlspecialchars($l['laboratorio']) ?></option>
                        <?php endforeach; ?>
                    </select>
                    <input type="number" id="newLabMargen" step="0.01" placeholder="Margen %" style="width:100px;padding:0.5rem 0.75rem;border-radius:0.75rem;border:1px solid var(--border-color);font-size:0.85rem">
                    <button class="btn-save" onclick="agregarMargenLab()" style="padding:0.5rem 1rem;font-size:0.8rem"><i class="bi bi-plus-lg"></i> Agregar</button>
                </div>
                <?php endif; ?>
            <?php endif; ?>
        </div>

        <?php if (count($margenes_lab) > 0): ?>
        <div style="margin-top:1rem;padding-top:0.75rem;border-top:1px solid var(--border-color);display:flex;gap:0.5rem">
            <button class="btn-save" onclick="guardarCambios()"><i class="bi bi-floppy"></i> Guardar Cambios</button>
            <button class="btn-save" onclick="descartarCambios()" style="background:var(--border-color);color:var(--text-primary)"><i class="bi bi-x-circle"></i> Descartar</button>
        </div>
        <?php endif; ?>
    </div>
</div>

<script>
var margenModificados = {};

function agregarMargenLab() {
    var sel = document.getElementById('newLabSelect');
    var inp = document.getElementById('newLabMargen');
    var lab = sel.value;
    var margen = parseFloat(inp.value);
    if (!lab || isNaN(margen)) { alert('Selecciona un laboratorio y escribe un margen válido.'); return; }

    var labEsc = lab.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
    var div = document.createElement('div');
    div.className = 'lab-row';
    div.setAttribute('data-lab', lab);
    div.innerHTML = '<div class="lab-name">' + labEsc + '</div>' +
        '<div style="display:flex;align-items:center;gap:0.5rem">' +
        '<input type="number" step="0.01" class="lab-input" value="' + margen + '" data-new="' + labEsc + '">' +
        '<span class="lab-default">%</span>' +
        '</div>';
    document.getElementById('labMargenes').insertBefore(div, document.querySelector('.add-lab-bar'));

    sel.value = '';
    inp.value = '';
    margenModificados[lab] = margen;
}

function guardarCambios() {
    // Collect all edits
    var cambios = {};
    document.querySelectorAll('.lab-row').forEach(function(row) {
        var input = row.querySelector('.lab-input');
        if (!input) return;
        var lab = row.getAttribute('data-lab');
        if (!lab) {
            lab = input.getAttribute('data-new');
        }
        var val = parseFloat(input.value);
        if (lab && !isNaN(val)) {
            cambios[lab] = val;
        }
    });

    var labs = Object.keys(cambios);
    if (labs.length === 0) return;

    var pendientes = labs.length;
    labs.forEach(function(lab) {
        fetch('api/precios/save_margen_laboratorio.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ laboratorio: lab, margen: cambios[lab] })
        }).then(function(r) { return r.json(); }).then(function(d) {
            pendientes--;
            if (pendientes === 0) {
                window.location.reload();
            }
        }).catch(function() {
            pendientes--;
            if (pendientes === 0) {
                window.location.reload();
            }
        });
    });
}

function descartarCambios() {
    window.location.reload();
}
</script>

<?php renderFooter(); ?>

