<?php
// ARCHIVO: api_logic/inventario.php

// ==========================================
// 1. GESTIÓN DE PRODUCTOS
// ==========================================
if ($task == 'search_products') {
    $term = $_GET['term'] ?? '';
    $termLike = "%$term%";
    $sql = "SELECT *, DATEDIFF(fecha_caducidad, CURDATE()) as dv FROM productos WHERE stock > 0";
    if ($term !== '') $sql .= " AND (nombre LIKE ? OR codigo_barras LIKE ? OR laboratorio LIKE ? OR principio_activo LIKE ?)";
    $sql .= " ORDER BY nombre ASC LIMIT 100";
    
    $stmt = $conn->prepare($sql);
    if ($term !== '') $stmt->bind_param("ssss", $termLike, $termLike, $termLike, $termLike);
    $stmt->execute();
    $res = $stmt->get_result();
    
    $data = []; 
    while($r = $res->fetch_assoc()){ $r['precio_venta'] = (float)$r['precio_venta']; $data[] = $r; }
    json_response($data);
}

if ($task == 'save_producto') {
    $id = $_POST['id_producto'] ?? '';
    $cb = $_POST['cb'] ?? ''; $nom = $_POST['n'] ?? '';
    
    if (empty($nom) || empty($cb)) json_error("Falta Nombre o Código");
    
    $pa = $_POST['pa'] ?? ''; $lab = $_POST['laboratorio'] ?? ''; $ubic = $_POST['ubicacion'] ?? '';
    $pv = (float)$_POST['pv']; $pc = (float)($_POST['pc'] ?? 0); $stock = (float)($_POST['s'] ?? 0);
    $pb = (float)($_POST['p_blister'] ?? 0); $cbli = (int)($_POST['c_blister'] ?? 1);
    $pcaja = (float)($_POST['p_caja'] ?? 0); $ccaja = (int)($_POST['c_caja'] ?? 1);
    $cdig = $_POST['codigo_digemid'] ?? ''; $pres = $_POST['presentacion'] ?? ''; $acc = $_POST['accion_terapeutica'] ?? '';

    if (empty($id)) {
        $stmtDup = $conn->prepare("SELECT id_producto FROM productos WHERE codigo_barras = ?");
        $stmtDup->bind_param("s", $cb); $stmtDup->execute();
        if ($stmtDup->get_result()->num_rows > 0) json_response(['success'=>false, 'is_duplicate'=>true]);

        $stmt = $conn->prepare("INSERT INTO productos (codigo_barras, nombre, principio_activo, laboratorio, ubicacion, precio_venta, precio_costo, stock, precio_blister, cantidad_blister, precio_caja, cantidad_caja, codigo_digemid, presentacion, accion_terapeutica) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
        $stmt->bind_param("sssssddddididss", $cb, $nom, $pa, $lab, $ubic, $pv, $pc, $stock, $pb, $cbli, $pcaja, $ccaja, $cdig, $pres, $acc);
        if ($stmt->execute()) {
            $nid = $conn->insert_id;
            if($stock > 0) $conn->query("INSERT INTO kardex (id_producto, id_usuario, tipo, cantidad, motivo) VALUES ($nid, $uid, 'ENTRADA', $stock, 'Stock Inicial Base')");
            json_response(['success' => true]);
        } else json_error("Error: " . $conn->error);
    } else {
        $stmt = $conn->prepare("UPDATE productos SET codigo_barras=?, nombre=?, principio_activo=?, laboratorio=?, ubicacion=?, precio_venta=?, precio_costo=?, precio_blister=?, cantidad_blister=?, precio_caja=?, cantidad_caja=?, codigo_digemid=?, presentacion=?, accion_terapeutica=? WHERE id_producto=?");
        $stmt->bind_param("sssssdddididssi", $cb, $nom, $pa, $lab, $ubic, $pv, $pc, $pb, $cbli, $pcaja, $ccaja, $cdig, $pres, $acc, $id);
        if ($stmt->execute()) json_response(['success' => true]);
        else json_error("Error: " . $conn->error);
    }
}

if ($task == 'delete_product') {
    $id = (int)$_POST['id'];
    $conn->query("DELETE FROM productos WHERE id_producto = $id");
    json_response(['success' => true]);
}

// ==========================================
// 2. GESTIÓN DE LOTES (Sincronizado)
// ==========================================
if ($task == 'get_lotes_producto') {
    $id = (int)$_GET['id'];
    $res = $conn->query("SELECT * FROM lotes WHERE id_producto = $id AND estado = 1 ORDER BY fecha_vencimiento ASC");
    json_response($res->fetch_all(MYSQLI_ASSOC));
}

if ($task == 'save_lote_manual') {
    $pid = (int)$_POST['id_producto']; 
    $cod = $conn->real_escape_string($_POST['codigo_lote']);
    $ven = $_POST['fecha_vencimiento']; 
    $can = (float)$_POST['cantidad'];
    
    $chk = $conn->query("SELECT id_lote FROM lotes WHERE id_producto = $pid AND codigo_lote = '$cod'");
    if ($chk->num_rows > 0) {
        $conn->query("UPDATE lotes SET stock_actual = stock_actual + $can, fecha_vencimiento = '$ven' WHERE id_producto = $pid AND codigo_lote = '$cod'");
    } else {
        $conn->query("INSERT INTO lotes (id_producto, codigo_lote, fecha_vencimiento, stock_actual) VALUES ($pid, '$cod', '$ven', $can)");
    }
    
    $conn->query("UPDATE productos SET stock = stock + $can WHERE id_producto = $pid");
    
    // Semáforo de Vencimiento
    $qMin = $conn->query("SELECT MIN(fecha_vencimiento) as f FROM lotes WHERE id_producto = $pid AND stock_actual > 0 AND estado = 1");
    $rMin = $qMin->fetch_assoc();
    if ($rMin['f']) $conn->query("UPDATE productos SET fecha_caducidad = '{$rMin['f']}' WHERE id_producto = $pid");
    
    $conn->query("INSERT INTO kardex (id_producto, id_usuario, tipo, cantidad, motivo) VALUES ($pid, $uid, 'ENTRADA', $can, 'Ajuste de Lote Manual: $cod')");
    json_response(['success' => true]);
}

if ($task == 'delete_lote') {
    $id = (int)$_POST['id_lote'];
    $lote = $conn->query("SELECT id_producto, stock_actual, codigo_lote FROM lotes WHERE id_lote = $id")->fetch_assoc();
    if($lote) {
        $conn->query("UPDATE productos SET stock = stock - {$lote['stock_actual']} WHERE id_producto = {$lote['id_producto']}");
        $conn->query("DELETE FROM lotes WHERE id_lote = $id");
        $conn->query("INSERT INTO kardex (id_producto, id_usuario, tipo, cantidad, motivo) VALUES ({$lote['id_producto']}, $uid, 'SALIDA', {$lote['stock_actual']}, 'Lote Eliminado: {$lote['codigo_lote']}')");
    }
    json_response(['success' => true]);
}

// ==========================================
// 3. GESTIÓN DE LABORATORIOS (Coregido)
// ==========================================
if ($task == 'get_labs') { 
    $res = $conn->query("SELECT * FROM laboratorios WHERE estado = 1 ORDER BY descripcion ASC"); 
    if($res) json_response($res->fetch_all(MYSQLI_ASSOC)); else json_response([]);
}

if ($task == 'save_lab') {
    $id = (int)($_POST['id_lab'] ?? 0);
    $desc = $_POST['desc'] ?? '';
    $cod = $_POST['cod'] ?? '';
    $abbr = $_POST['abbr'] ?? '';
    
    if (empty($id)) {
        $stmt = $conn->prepare("INSERT INTO laboratorios (codigo, descripcion, abreviatura, estado) VALUES (?, ?, ?, 1)");
        $stmt->bind_param("sss", $cod, $desc, $abbr);
    } else {
        $stmt = $conn->prepare("UPDATE laboratorios SET codigo=?, descripcion=?, abreviatura=? WHERE id_laboratorio=?");
        $stmt->bind_param("sssi", $cod, $desc, $abbr, $id);
    }
    $stmt->execute();
    json_response(['success' => true]);
}

if ($task == 'delete_lab') {
    $id = (int)($_POST['id_laboratorio'] ?? $_POST['id'] ?? 0);
    if ($id > 0) {
        // Soft delete para no romper productos que ya tienen este laboratorio guardado
        $conn->query("UPDATE laboratorios SET estado = 0 WHERE id_laboratorio = $id");
        json_response(['success' => true]);
    } else {
        json_error("ID de laboratorio inválido.");
    }
}

// ==========================================
// 4. COMPRAS (Integración total con Lotes)
// ==========================================
if ($task == 'get_proveedores') {
    $res = $conn->query("SELECT id_proveedor, razon_social FROM proveedores WHERE estado = 1");
    if($res) json_response($res->fetch_all(MYSQLI_ASSOC)); else json_response([]);
}

if ($task == 'save_compra') {
    $prov = (int)$_POST['id_prov'];
    $tipo = $_POST['tipo_doc'];
    $num  = $_POST['num_doc'];
    $fecha = $_POST['fecha'];
    $items = json_decode($_POST['items'], true);
    if (empty($items)) json_error("El detalle de compra está vacío.");

    $conn->begin_transaction();
    try {
        $total_compra = 0; 
        foreach($items as $i) $total_compra += $i['subtotal'];
        
        $stmt = $conn->prepare("INSERT INTO compras (id_proveedor, id_usuario, tipo_documento, numero_documento, fecha_compra, monto_total) VALUES (?, ?, ?, ?, ?, ?)");
        $stmt->bind_param("iisssd", $prov, $uid, $tipo, $num, $fecha, $total_compra);
        $stmt->execute(); 
        $id_compra = $conn->insert_id;

        foreach ($items as $item) {
            $pid = $item['id']; $cant = $item['cant']; $lote = $item['lote']; $venc = $item['venc']; $costo = $item['costo'];
            
            $conn->query("INSERT INTO detalle_compras (id_compra, id_producto, cantidad, costo_unitario) VALUES ($id_compra, $pid, $cant, $costo)");
            $conn->query("UPDATE productos SET stock = stock + $cant WHERE id_producto = $pid");
            
            $chk = $conn->query("SELECT id_lote FROM lotes WHERE id_producto = $pid AND codigo_lote = '$lote'");
            if ($chk->num_rows > 0) {
                $conn->query("UPDATE lotes SET stock_actual = stock_actual + $cant, fecha_vencimiento = '$venc' WHERE id_producto = $pid AND codigo_lote = '$lote'");
            } else {
                $conn->query("INSERT INTO lotes (id_producto, codigo_lote, fecha_vencimiento, stock_actual) VALUES ($pid, '$lote', '$venc', $cant)");
            }
            
            $qMin = $conn->query("SELECT MIN(fecha_vencimiento) as f FROM lotes WHERE id_producto = $pid AND stock_actual > 0 AND estado = 1");
            if ($rMin = $qMin->fetch_assoc()['f']) $conn->query("UPDATE productos SET fecha_caducidad = '{$rMin}' WHERE id_producto = $pid");
            
            $conn->query("INSERT INTO kardex (id_producto, id_usuario, tipo, cantidad, motivo) VALUES ($pid, $uid, 'ENTRADA', $cant, 'Compra Registrada Doc: $tipo $num')");
        }
        $conn->commit(); 
        json_response(['success' => true]);
    } catch (Exception $e) { 
        $conn->rollback(); 
        json_error("Error de Base de Datos: " . $e->getMessage()); 
    }
}
?>