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

switch ($tipo) {
    case 'getReceta':
        $producto_id = isset($datapost['producto_id']) ? (int)$datapost['producto_id'] : 0;

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

        // Obtener ingredientes de la receta
        $sqlIngredientes = "SELECT pi.id, pi.ingrediente_id, pi.cantidad, pi.unidad,
                            i.nombre, i.unidad as unidad_base
                            FROM producto_ingredientes pi
                            INNER JOIN ingredientes i ON pi.ingrediente_id = i.id
                            WHERE pi.producto_id = $producto_id
                            ORDER BY i.nombre ASC";
        $resultIng = mysqli_query($conn, $sqlIngredientes);

        $ingredientes = [];
        if ($resultIng) {
            while ($row = mysqli_fetch_assoc($resultIng)) {
                $ingredientes[] = [
                    'id' => (int)$row['id'],
                    'ingrediente_id' => (int)$row['ingrediente_id'],
                    'nombre' => $row['nombre'],
                    'cantidad' => (float)$row['cantidad'],
                    'unidad' => $row['unidad'] ?: $row['unidad_base']
                ];
            }
        }

        // Obtener productos componentes de la receta
        $sqlComponentes = "SELECT pc.id, pc.componente_id, pc.cantidad, pc.unidad,
                           p.nombre, p.unidad as unidad_base, p.precio
                           FROM producto_componentes pc
                           INNER JOIN productos p ON pc.componente_id = p.id
                           WHERE pc.producto_id = $producto_id AND p.activo = 1
                           ORDER BY p.nombre ASC";
        $resultComp = mysqli_query($conn, $sqlComponentes);

        $componentes = [];
        if ($resultComp) {
            while ($row = mysqli_fetch_assoc($resultComp)) {
                $componentes[] = [
                    'id' => (int)$row['id'],
                    'componente_id' => (int)$row['componente_id'],
                    'nombre' => $row['nombre'],
                    'cantidad' => (float)$row['cantidad'],
                    'unidad' => $row['unidad'] ?: $row['unidad_base'],
                    'precio' => (float)$row['precio']
                ];
            }
        }

        sendResponse(true, "Receta obtenida", [
            'producto_id' => $producto_id,
            'ingredientes' => $ingredientes,
            'componentes' => $componentes
        ]);
        break;

    case 'guardarReceta':
        $producto_id = isset($datapost['producto_id']) ? (int)$datapost['producto_id'] : 0;
        $ingredientes = isset($datapost['ingredientes']) ? $datapost['ingredientes'] : [];
        $componentes = isset($datapost['componentes']) ? $datapost['componentes'] : [];

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

        // Verificar que el producto existe
        $checkProd = mysqli_query($conn, "SELECT id FROM productos WHERE id = $producto_id AND activo = 1");
        if (!$checkProd || mysqli_num_rows($checkProd) == 0) {
            sendResponse(false, "Producto no encontrado");
        }

        // Iniciar transaccion
        mysqli_begin_transaction($conn);

        try {
            // Eliminar ingredientes anteriores
            mysqli_query($conn, "DELETE FROM producto_ingredientes WHERE producto_id = $producto_id");

            // Insertar nuevos ingredientes
            foreach ($ingredientes as $ing) {
                $ingrediente_id = (int)$ing['ingrediente_id'];
                $cantidad = (float)$ing['cantidad'];
                $unidad = mysqli_real_escape_string($conn, $ing['unidad'] ?? 'pza');

                if ($ingrediente_id > 0 && $cantidad > 0) {
                    $sql = "INSERT INTO producto_ingredientes (producto_id, ingrediente_id, cantidad, unidad)
                            VALUES ($producto_id, $ingrediente_id, $cantidad, '$unidad')";
                    if (!mysqli_query($conn, $sql)) {
                        throw new Exception("Error al insertar ingrediente: " . mysqli_error($conn));
                    }
                }
            }

            // Eliminar componentes anteriores
            mysqli_query($conn, "DELETE FROM producto_componentes WHERE producto_id = $producto_id");

            // Insertar nuevos componentes
            foreach ($componentes as $comp) {
                $componente_id = (int)$comp['componente_id'];
                $cantidad = (float)$comp['cantidad'];
                $unidad = mysqli_real_escape_string($conn, $comp['unidad'] ?? 'pza');

                // Evitar que un producto se contenga a si mismo
                if ($componente_id == $producto_id) {
                    continue;
                }

                if ($componente_id > 0 && $cantidad > 0) {
                    $sql = "INSERT INTO producto_componentes (producto_id, componente_id, cantidad, unidad)
                            VALUES ($producto_id, $componente_id, $cantidad, '$unidad')";
                    if (!mysqli_query($conn, $sql)) {
                        throw new Exception("Error al insertar componente: " . mysqli_error($conn));
                    }
                }
            }

            // Actualizar flag tiene_receta
            $tieneReceta = (count($ingredientes) > 0 || count($componentes) > 0) ? 1 : 0;
            mysqli_query($conn, "UPDATE productos SET tiene_receta = $tieneReceta WHERE id = $producto_id");

            mysqli_commit($conn);
            sendResponse(true, "Receta guardada correctamente");

        } catch (Exception $e) {
            mysqli_rollback($conn);
            sendResponse(false, $e->getMessage());
        }
        break;

    case 'eliminarReceta':
        $producto_id = isset($datapost['producto_id']) ? (int)$datapost['producto_id'] : 0;

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

        mysqli_begin_transaction($conn);

        try {
            mysqli_query($conn, "DELETE FROM producto_ingredientes WHERE producto_id = $producto_id");
            mysqli_query($conn, "DELETE FROM producto_componentes WHERE producto_id = $producto_id");
            mysqli_query($conn, "UPDATE productos SET tiene_receta = 0 WHERE id = $producto_id");

            mysqli_commit($conn);
            sendResponse(true, "Receta eliminada correctamente");

        } catch (Exception $e) {
            mysqli_rollback($conn);
            sendResponse(false, "Error al eliminar receta: " . $e->getMessage());
        }
        break;

    case 'calcularCostoReceta':
        $producto_id = isset($datapost['producto_id']) ? (int)$datapost['producto_id'] : 0;

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

        $costoTotal = 0;
        $desglose = [];

        // Costo de ingredientes
        $sqlIng = "SELECT pi.cantidad, i.nombre, i.costo, i.unidad
                   FROM producto_ingredientes pi
                   INNER JOIN ingredientes i ON pi.ingrediente_id = i.id
                   WHERE pi.producto_id = $producto_id";
        $resultIng = mysqli_query($conn, $sqlIng);

        if ($resultIng) {
            while ($row = mysqli_fetch_assoc($resultIng)) {
                $costo = (float)$row['cantidad'] * (float)$row['costo'];
                $costoTotal += $costo;
                $desglose[] = [
                    'tipo' => 'ingrediente',
                    'nombre' => $row['nombre'],
                    'cantidad' => (float)$row['cantidad'],
                    'unidad' => $row['unidad'],
                    'costo_unitario' => (float)$row['costo'],
                    'costo_total' => $costo
                ];
            }
        }

        // Costo de componentes (otros productos)
        $sqlComp = "SELECT pc.cantidad, p.nombre, p.precio, p.unidad
                    FROM producto_componentes pc
                    INNER JOIN productos p ON pc.componente_id = p.id
                    WHERE pc.producto_id = $producto_id AND p.activo = 1";
        $resultComp = mysqli_query($conn, $sqlComp);

        if ($resultComp) {
            while ($row = mysqli_fetch_assoc($resultComp)) {
                $costo = (float)$row['cantidad'] * (float)$row['precio'];
                $costoTotal += $costo;
                $desglose[] = [
                    'tipo' => 'producto',
                    'nombre' => $row['nombre'],
                    'cantidad' => (float)$row['cantidad'],
                    'unidad' => $row['unidad'],
                    'costo_unitario' => (float)$row['precio'],
                    'costo_total' => $costo
                ];
            }
        }

        sendResponse(true, "Costo calculado", [
            'producto_id' => $producto_id,
            'costo_total' => $costoTotal,
            'desglose' => $desglose
        ]);
        break;

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