<?php
if (!defined('BASEPATH')) {
    http_response_code(403);
    die(json_encode(["success" => false, "message" => "Acceso directo no permitido"]));
}

$motivosLabels = [
    'caducidad' => 'Caducidad',
    'dano' => 'Daño',
    'derrame' => 'Derrame',
    'error_produccion' => 'Error de producción',
    'contaminacion' => 'Contaminación',
    'devolucion' => 'Devolución',
    'otro' => 'Otro'
];

switch ($tipo) {
    case 'getMermas':
        $sql = "SELECT m.*, u.nombre as usuario_nombre
                FROM mermas m
                LEFT JOIN usuarios u ON m.usuario_id = u.id
                ORDER BY m.fecha DESC, m.created_at DESC";
        $result = mysqli_query($conn, $sql);

        if ($result) {
            $mermas = [];
            while ($row = mysqli_fetch_assoc($result)) {
                // Obtener nombre del item segun tipo
                $itemNombre = '';
                switch ($row['tipo_item']) {
                    case 'producto':
                        $itemResult = mysqli_query($conn, "SELECT nombre FROM productos WHERE id = " . (int)$row['item_id']);
                        if ($itemRow = mysqli_fetch_assoc($itemResult)) {
                            $itemNombre = $itemRow['nombre'];
                        }
                        break;
                    case 'ingrediente':
                        $itemResult = mysqli_query($conn, "SELECT nombre FROM ingredientes WHERE id = " . (int)$row['item_id']);
                        if ($itemRow = mysqli_fetch_assoc($itemResult)) {
                            $itemNombre = $itemRow['nombre'];
                        }
                        break;
                    case 'produccion':
                        $itemResult = mysqli_query($conn, "SELECT p.nombre as producto_nombre FROM producciones pr LEFT JOIN productos p ON pr.producto_id = p.id WHERE pr.id = " . (int)$row['item_id']);
                        if ($itemRow = mysqli_fetch_assoc($itemResult)) {
                            $itemNombre = $itemRow['producto_nombre'];
                        }
                        break;
                }

                $mermas[] = [
                    'id' => (int)$row['id'],
                    'tipo_item' => $row['tipo_item'],
                    'item_id' => (int)$row['item_id'],
                    'item_nombre' => $itemNombre ?: 'Item eliminado',
                    'cantidad' => (float)$row['cantidad'],
                    'unidad' => $row['unidad'],
                    'motivo' => $row['motivo'],
                    'motivo_label' => isset($motivosLabels[$row['motivo']]) ? $motivosLabels[$row['motivo']] : $row['motivo'],
                    'observaciones' => $row['observaciones'],
                    'fecha' => $row['fecha'],
                    'usuario_id' => (int)$row['usuario_id'],
                    'usuario_nombre' => $row['usuario_nombre'] ?: 'Desconocido'
                ];
            }
            sendResponse(true, "Mermas obtenidas", $mermas);
        } else {
            sendResponse(false, "Error al obtener mermas: " . mysqli_error($conn));
        }
        break;

    case 'registrarMerma':
        $tipo_item = isset($datapost['tipo_item']) ? mysqli_real_escape_string($conn, $datapost['tipo_item']) : '';
        $item_id = isset($datapost['item_id']) ? (int)$datapost['item_id'] : 0;
        $cantidad = isset($datapost['cantidad']) ? (float)$datapost['cantidad'] : 0;
        $unidad = isset($datapost['unidad']) ? mysqli_real_escape_string($conn, $datapost['unidad']) : '';
        $motivo = isset($datapost['motivo']) ? mysqli_real_escape_string($conn, $datapost['motivo']) : '';
        $observaciones = isset($datapost['observaciones']) ? mysqli_real_escape_string($conn, $datapost['observaciones']) : '';
        $usuario_id = isset($datapost['usuario_id']) ? (int)$datapost['usuario_id'] : 0;

        // Validaciones
        if (!in_array($tipo_item, ['producto', 'ingrediente', 'produccion'])) {
            sendResponse(false, "Tipo de item no valido");
        }
        if ($item_id <= 0) {
            sendResponse(false, "Item no valido");
        }
        if ($cantidad <= 0) {
            sendResponse(false, "La cantidad debe ser mayor a 0");
        }
        if (empty($motivo)) {
            sendResponse(false, "El motivo es requerido");
        }

        // Verificar stock disponible antes de descontar
        $stockSuficiente = true;
        $stockActual = 0;
        switch ($tipo_item) {
            case 'producto':
                $checkResult = mysqli_query($conn, "SELECT stock FROM productos WHERE id = $item_id AND activo = 1");
                if ($checkRow = mysqli_fetch_assoc($checkResult)) {
                    $stockActual = (float)$checkRow['stock'];
                    if ($stockActual < $cantidad) {
                        $stockSuficiente = false;
                    }
                } else {
                    sendResponse(false, "Producto no encontrado");
                }
                break;
            case 'ingrediente':
                $checkResult = mysqli_query($conn, "SELECT cantidad FROM ingredientes WHERE id = $item_id AND activo = 1");
                if ($checkRow = mysqli_fetch_assoc($checkResult)) {
                    $stockActual = (float)$checkRow['cantidad'];
                    if ($stockActual < $cantidad) {
                        $stockSuficiente = false;
                    }
                } else {
                    sendResponse(false, "Ingrediente no encontrado");
                }
                break;
            case 'produccion':
                $checkResult = mysqli_query($conn, "SELECT cantidad_producida FROM producciones WHERE id = $item_id");
                if ($checkRow = mysqli_fetch_assoc($checkResult)) {
                    $stockActual = (float)$checkRow['cantidad_producida'];
                    if ($stockActual < $cantidad) {
                        $stockSuficiente = false;
                    }
                } else {
                    sendResponse(false, "Produccion no encontrada");
                }
                break;
        }

        if (!$stockSuficiente) {
            sendResponse(false, "Stock insuficiente. Disponible: $stockActual $unidad");
        }

        $fecha = date('Y-m-d');

        // Insertar merma
        $sql = "INSERT INTO mermas (tipo_item, item_id, cantidad, unidad, motivo, observaciones, fecha, usuario_id)
                VALUES ('$tipo_item', $item_id, $cantidad, '$unidad', '$motivo', '$observaciones', '$fecha', $usuario_id)";

        if (mysqli_query($conn, $sql)) {
            // Descontar stock
            switch ($tipo_item) {
                case 'producto':
                    mysqli_query($conn, "UPDATE productos SET stock = stock - $cantidad, updated_at = NOW() WHERE id = $item_id");
                    break;
                case 'ingrediente':
                    mysqli_query($conn, "UPDATE ingredientes SET cantidad = cantidad - $cantidad, updated_at = NOW() WHERE id = $item_id");
                    break;
                case 'produccion':
                    mysqli_query($conn, "UPDATE producciones SET cantidad_producida = cantidad_producida - $cantidad WHERE id = $item_id");
                    break;
            }

            $nuevoId = mysqli_insert_id($conn);
            sendResponse(true, "Merma registrada correctamente", ['id' => $nuevoId]);
        } else {
            sendResponse(false, "Error al registrar merma: " . mysqli_error($conn));
        }
        break;

    case 'eliminarMerma':
        $id = isset($datapost['id']) ? (int)$datapost['id'] : 0;

        if ($id <= 0) {
            sendResponse(false, "ID de merma no valido");
        }

        // Obtener datos de la merma para restaurar stock
        $mermaResult = mysqli_query($conn, "SELECT * FROM mermas WHERE id = $id");
        if (!$mermaResult || mysqli_num_rows($mermaResult) === 0) {
            sendResponse(false, "Merma no encontrada");
        }

        $merma = mysqli_fetch_assoc($mermaResult);
        $tipo_item = $merma['tipo_item'];
        $item_id = (int)$merma['item_id'];
        $cantidad = (float)$merma['cantidad'];

        // Eliminar merma
        if (mysqli_query($conn, "DELETE FROM mermas WHERE id = $id")) {
            // Restaurar stock
            switch ($tipo_item) {
                case 'producto':
                    mysqli_query($conn, "UPDATE productos SET stock = stock + $cantidad, updated_at = NOW() WHERE id = $item_id");
                    break;
                case 'ingrediente':
                    mysqli_query($conn, "UPDATE ingredientes SET cantidad = cantidad + $cantidad, updated_at = NOW() WHERE id = $item_id");
                    break;
                case 'produccion':
                    mysqli_query($conn, "UPDATE producciones SET cantidad_producida = cantidad_producida + $cantidad WHERE id = $item_id");
                    break;
            }

            sendResponse(true, "Merma eliminada y stock restaurado");
        } else {
            sendResponse(false, "Error al eliminar merma: " . mysqli_error($conn));
        }
        break;

    default:
        sendResponse(false, "Operacion no valida en Merma");
        break;
}
