print("Anspruchsvolle Shooter-Spiele (mit separaten $match Stages):");
db.spiele
  .aggregate([
    { $match: { genre: "Tactical Shooter" } },
    { $match: { schwierigkeitsgrad: "Hoch" } },
  ])
  .forEach(printjson);

print("\nSpieler Performance Übersicht:");
db.spieler
  .aggregate([
    {
      $match: {
        gesamtpunktzahl: { $gt: 1000 },
      },
    },
    {
      $project: {
        _id: 0,
        username: 1,
        performance_metrics: {
          punktzahl: "$gesamtpunktzahl",
          durchschnittliche_kd: {
            $avg: "$spielstatistiken.k_d_ratio",
          },
          gesamt_spielzeit: {
            $sum: "$spielstatistiken.spielzeit_minuten",
          },
        },
      },
    },
    {
      $sort: {
        "performance_metrics.punktzahl": -1,
      },
    },
  ])
  .forEach(printjson);

print("\nGesamtstatistiken über alle Spieler:");
db.spieler
  .aggregate([
    {
      $group: {
        _id: null,
        total_players: { $sum: 1 },
        gesamtpunktzahl: { $sum: "$gesamtpunktzahl" },
        durchschnittspunktzahl: { $avg: "$gesamtpunktzahl" },
      },
    },
  ])
  .forEach(printjson);

print("\nAchievement-Statistiken nach Schwierigkeitsgrad:");
db.achievements
  .aggregate([
    {
      $group: {
        _id: "$schwierigkeit",
        anzahl_achievements: { $sum: 1 },
        durchschnittspunkte: { $avg: "$punktewert" },
        gesamtpunkte: { $sum: "$punktewert" },
        achievements: {
          $push: {
            name: "$name",
            punktewert: "$punktewert",
          },
        },
      },
    },
    {
      $sort: {
        durchschnittspunkte: -1,
      },
    },
  ])
  .forEach(printjson);

print("\nDurchschnittliche Leistung pro Spiel:");
db.spieler
  .aggregate([
    { $unwind: "$spielstatistiken" },
    {
      $group: {
        _id: "$spielstatistiken.spiel_id",
        anzahl_spieler: { $sum: 1 },
        durchschnitt_kd: { $avg: "$spielstatistiken.k_d_ratio" },
        gesamt_siege: { $sum: "$spielstatistiken.siege" },
        gesamt_niederlagen: { $sum: "$spielstatistiken.niederlagen" },
        durchschnitt_spielzeit: { $avg: "$spielstatistiken.spielzeit_minuten" },
      },
    },
    {
      $lookup: {
        from: "spiele",
        localField: "_id",
        foreignField: "_id",
        as: "spielinfo",
      },
    },
    {
      $project: {
        _id: 0,
        spiel: { $arrayElemAt: ["$spielinfo.spielname", 0] },
        statistiken: {
          spieler: "$anzahl_spieler",
          kd_ratio: { $round: ["$durchschnitt_kd", 2] },
          siege: "$gesamt_siege",
          niederlagen: "$gesamt_niederlagen",
          avg_spielzeit: { $round: ["$durchschnitt_spielzeit", 0] },
        },
      },
    },
  ])
  .forEach(printjson);
