<?php
require_once 'db.php';
check_session(); 
$v = $_GET['v'] ?? '';

// 1. Redirección automática si entra a la raíz
if (empty($v) || $v == 'home') {
    if(tiene_acceso('home')) $v = 'home';
    elseif(tiene_acceso('pos')) $v = 'pos';
    elseif(tiene_acceso('productos')) $v = 'productos';
    else $v = 'login';
}

// 2. PARCHE DE PERMISOS (Aquí está la magia para que funcione Vencimientos)
$permiso_requerido = $v;
if ($v == 'vencimientos') $permiso_requerido = 'productos'; // Quien ve productos, ve vencimientos
if ($v == 'cotizaciones') $permiso_requerido = 'pos';       // Quien ve POS, ve cotizaciones

// 3. Verificación Estricta de Seguridad
if (!empty($v) && !tiene_acceso($permiso_requerido)) {
    die("<div style='text-align:center;margin-top:50px'><h1>🚫 403</h1><p>Acceso Denegado al módulo: $v</p><a href='index.php'>Volver al Inicio</a></div>");
}

function guardado_seguro($conn, $tabla, $datos) {
    $cols=[]; $r=$conn->query("SHOW COLUMNS FROM $tabla"); while($x=$r->fetch_assoc()){$cols[]=$x['Field'];}
    $clean=[]; foreach($datos as $k=>$v){ if(in_array($k,$cols)) $clean[$k]=$v; }
    $f=implode(",",array_keys($clean)); $q=implode(",",array_fill(0,count($clean),"?"));
    $t=""; $val=[]; foreach($clean as $x){ $t.=(is_int($x)?"i":(is_float($x)?"d":"s")); $val[]=$x; }
    $stmt=$conn->prepare("INSERT INTO $tabla ($f) VALUES ($q)"); $stmt->bind_param($t,...$val); return $stmt->execute();
}

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['action'])) {
    $act = $_POST['action']; $s = false;
    try {
        if ($act == 'save_producto') {
            $img = ""; if(!empty($_FILES['img']['name'])){ $t="uploads/".time()."_".$_FILES['img']['name']; move_uploaded_file($_FILES['img']['tmp_name'],$t); $img=$t; }
            $d = ['codigo_barras'=>$_POST['cb'], 'nombre'=>$_POST['n'], 'principio_activo'=>$_POST['pa'], 'precio_venta'=>$_POST['pv'], 'precio_costo'=>$_POST['pc'], 'stock'=>$_POST['s'], 'laboratorio'=>$_POST['laboratorio'], 'ubicacion'=>$_POST['ubicacion'], 'imagen_url'=>$img, 'fecha_caducidad'=>!empty($_POST['f_venc'])?$_POST['f_venc']:NULL, 'codigo_digemid'=>$_POST['codigo_digemid']??'', 'accion_terapeutica'=>$_POST['accion_terapeutica']??'', 'presentacion'=>$_POST['presentacion']??''];
            $s = guardado_seguro($conn, 'productos', $d);
            if($s) { $lid = $conn->insert_id; $conn->query("INSERT INTO kardex (id_producto, id_usuario, tipo, cantidad, motivo) VALUES ($lid, {$_SESSION['user_id']}, 'ENTRADA', {$_POST['s']}, 'Carga Inicial')"); }
        }
        if ($act == 'save_cliente') {
            $foto = NULL; if(!empty($_FILES['foto']['name'])){ $t="uploads/cli_".time()."." . pathinfo($_FILES['foto']['name'], PATHINFO_EXTENSION); if(move_uploaded_file($_FILES['foto']['tmp_name'],$t)) $foto=$t; }
            $s = guardado_seguro($conn, 'clientes', ['documento'=>$_POST['doc'], 'nombre'=>$_POST['nom'], 'telefono'=>$_POST['tel'], 'direccion'=>$_POST['dir'], 'foto_url'=>$foto]);
        }
        if ($act == 'save_proveedor') {
            $s = guardado_seguro($conn, 'proveedores', ['ruc'=>$_POST['ruc'], 'razon_social'=>$_POST['razon'], 'telefono'=>$_POST['tel'], 'correo'=>$_POST['email'], 'direccion'=>$_POST['dir']]);
        }
        if ($act == 'save_egreso') $s = guardado_seguro($conn, 'egresos', ['descripcion'=>$_POST['descripcion'], 'monto'=>$_POST['monto'], 'categoria'=>$_POST['categoria']]);
        if ($act == 'save_user') { $hash = password_hash($_POST['password'], PASSWORD_DEFAULT); $s = guardado_seguro($conn, 'empleados', ['nombre'=>$_POST['nombre'], 'usuario'=>$_POST['usuario'], 'password_hash'=>$hash, 'rol'=>$_POST['rol'], 'estado'=>1]); }
        
        if ($act == 'save_config') {
            $curr = $conn->query("SELECT logo_url, favicon_url, qr_yape_url FROM configuracion WHERE id=1")->fetch_assoc();
            $logo = $curr['logo_url']; $fav = $curr['favicon_url']; $qr = $curr['qr_yape_url'];
            if (!empty($_FILES['logo']['name'])) { $t = "uploads/logo." . pathinfo($_FILES['logo']['name'], PATHINFO_EXTENSION); if(move_uploaded_file($_FILES['logo']['tmp_name'], $t)) $logo = $t."?v=".time(); }
            if (!empty($_FILES['favicon']['name'])) { $t = "uploads/favicon." . pathinfo($_FILES['favicon']['name'], PATHINFO_EXTENSION); if(move_uploaded_file($_FILES['favicon']['tmp_name'], $t)) $fav = $t."?v=".time(); }
            if (!empty($_FILES['qr_yape']['name'])) { $t = "uploads/qr_yape." . pathinfo($_FILES['qr_yape']['name'], PATHINFO_EXTENSION); if(move_uploaded_file($_FILES['qr_yape']['tmp_name'], $t)) $qr = $t."?v=".time(); }
            $stmt = $conn->prepare("UPDATE configuracion SET nombre_empresa=?, direccion=?, moneda=?, telefono=?, logo_url=?, favicon_url=?, qr_yape_url=?, impuesto_nombre=?, impuesto_valor=?, mensaje_ticket=?, sunat_ruta=?, sunat_token=? WHERE id=1");
            $stmt->bind_param("ssssssssssss", $_POST['nombre_empresa'], $_POST['direccion'], $_POST['moneda'], $_POST['telefono'], $logo, $fav, $qr, $_POST['impuesto_nombre'], $_POST['impuesto_valor'], $_POST['mensaje_ticket'], $_POST['sunat_ruta'], $_POST['sunat_token']);
            $s = $stmt->execute();
        }
    } catch (Exception $e) {}
    header("Location: index.php?v=$v&status=".($s?'success':'error')); exit();
}

$config = $conn->query("SELECT * FROM configuracion WHERE id=1")->fetch_assoc();
$moneda = h($config['moneda'] ?? 'S/.');

include 'includes/header.php';
$f = "views/" . basename($v) . ".php";
if (file_exists($f)) include $f; else echo "<div class='alert alert-danger'>Módulo no encontrado: $f</div>";
include 'includes/footer.php';
?>