// Crear e insertar datos en usuarios

db.usuarios.insertMany([
  { nombre: "Carlos Pérez", correo: "carlos@mail.com", productos_comprados: [] },
  { nombre: "María González", correo: "maria@mail.com", productos_comprados: [] },
  { nombre: "José Fernández", correo: "jose@mail.com", productos_comprados: [] }
]);

// Crear e insertar datos en productos
db.productos.insertMany([
  { nombre: "Laptop", precio: 1200, stock: 10 },
  { nombre: "Monitor", precio: 300, stock: 20 },
  { nombre: "Teclado", precio: 50, stock: 50 }
]);

// Crear e insertar datos en ventas
const venta = db.ventas.insertOne({
  usuario_id: ObjectId("<ID_Carlos>"),
  producto_id: ObjectId("<ID_Laptop>"),
  cantidad: 1,
  fecha: new Date("2024-03-01")
});

// Actualizar datos en usuarios
db.usuarios.updateOne(
    { _id: ObjectId("<ID_Carlos>") },
    { $push: { productos_comprados: venta.insertedId } }
);

// Actualizar datos en productos
db.productos.updateOne(
    { _id: ObjectId("<ID_Laptop>") },
    { $inc: { stock: -1 } }
);

// Consulta: Total de ventas por usuarios:

db.ventas.aggregate([
  { $lookup: {
      from: "productos",
      localField: "producto_id",
      foreignField: "_id",
      as: "producto_detalle"
  }},
  { $unwind: "$producto_detalle" },
  { $group: {
      _id: "$usuario_id",
      total_ventas: { $sum: { $multiply: ["$cantidad", "$producto_detalle.precio"] } }
  }},
  { $lookup: {
      from: "usuarios",
      localField: "_id",
      foreignField: "_id",
      as: "usuario"
  }},
  { $unwind: "$usuario" },
  { $project: {
      nombre: "$usuario.nombre",
      total_ventas: 1
  }}
]);

// Consulta: Descuentos y stock.

db.productos.find({}).forEach(producto => {
  print(`Producto: ${producto.nombre}, Stock restante: ${producto.stock}`);
});

// Consulta: Productos comprados por cada usuario:

db.usuarios.aggregate([
  { $lookup: {
      from: "ventas",
      localField: "_id",
      foreignField: "usuario_id",
      as: "ventas_usuario"
  }},
  { $unwind: "$ventas_usuario" },
  { $lookup: {
      from: "productos",
      localField: "ventas_usuario.producto_id",
      foreignField: "_id",
      as: "productos_comprados"
  }},
  { $project: {
      nombre: 1,
      productos_comprados: { $map: {
          input: "$productos_comprados",
          as: "producto",
          in: "$$producto.nombre"
      }}
  }}
]);
