const express = require("express"); const router = express.Router(); const db = require("../database/database"); /* ======================== Login Middleware (lokal) ======================== */ function requireLogin(req, res, next) { if (!req.session.user) { return res.status(401).json({ error: "Nicht eingeloggt" }); } next(); } /* ======================== HELPER: Spieler-Stats laden ======================== */ async function getPlayerStats(userId) { let hp = 20, mana = 3; try { const [[charStats]] = await db.query( "SELECT hp, mana FROM characters WHERE account_id = ?", [userId] ); if (charStats) { hp = charStats.hp || 20; mana = charStats.mana || 3; } } catch { // Tabelle existiert evtl. noch nicht – Defaults verwenden } return { hp, mana }; } /* ================================ Arena Übersicht GET /arena ================================ */ router.get("/", (req, res) => { res.render("arena", { title: "Kampfarena", }); }); /* ======================== GET /arena/me Eigene Spielerdaten für Matchmaking ======================== */ router.get("/me", requireLogin, async (req, res) => { try { const [[account]] = await db.query( "SELECT id, ingame_name, level FROM accounts WHERE id = ?", [req.session.user.id] ); if (!account) { return res.status(404).json({ error: "Spieler nicht gefunden" }); } res.json({ id: account.id, name: account.ingame_name || "Unbekannter Held", level: account.level || 1, }); } catch (err) { console.error("[Arena /me]", err); res.status(500).json({ error: "Datenbankfehler" }); } }); /* ================================ 1v1 Spielfeld GET /arena/1v1 ================================ */ router.get("/1v1", requireLogin, async (req, res) => { const userId = req.session.user.id; const { match: matchId, slot } = req.query; // Kein matchId → direkte Vorschau ohne Matchmaking (z.B. für Tests) if (!matchId) { return res.render("1v1-battlefield", { title: "1v1 Kampf", matchId: null, mySlot: "player1", player1: req.session?.user?.ingame_name || "Spieler 1", player2: "Gegner", player1hp: 20, player1mana: 3, player2hp: 20, player2mana: 3, }); } try { const [[me]] = await db.query("SELECT ingame_name FROM accounts WHERE id = ?", [userId]); const { hp, mana } = await getPlayerStats(userId); const isPlayer1 = slot === "player1"; res.render("1v1-battlefield", { title: "⚔️ 1v1 Kampf", matchId, mySlot: slot || "player1", player1: isPlayer1 ? (me?.ingame_name || "Du") : "Gegner", player2: isPlayer1 ? "Gegner" : (me?.ingame_name || "Du"), player1hp: isPlayer1 ? hp : 20, player1mana: isPlayer1 ? mana : 3, player2hp: isPlayer1 ? 20 : hp, player2mana: isPlayer1 ? 3 : mana, }); } catch (err) { console.error("[Arena /1v1]", err); res.status(500).send("Fehler beim Laden des Spielfelds."); } }); /* ================================ 2v2 Spielfeld GET /arena/2v2 ================================ */ router.get("/2v2", requireLogin, async (req, res) => { const userId = req.session.user.id; const { match: matchId, slot } = req.query; if (!matchId) { return res.render("1v1-battlefield", { title: "2v2 Kampf", matchId: null, mySlot: "team1_player1", player1: req.session?.user?.ingame_name || "Spieler 1", player2: "Gegner", player1hp: 20, player1mana: 3, player2hp: 20, player2mana: 3, }); } try { const [[me]] = await db.query("SELECT ingame_name FROM accounts WHERE id = ?", [userId]); const { hp, mana } = await getPlayerStats(userId); res.render("1v1-battlefield", { title: "⚔️ 2v2 Kampf", matchId, mySlot: slot || "team1_player1", player1: me?.ingame_name || "Du", player2: "Gegner", player1hp: hp, player1mana: mana, player2hp: 20, player2mana: 3, }); } catch (err) { console.error("[Arena /2v2]", err); res.status(500).send("Fehler beim Laden des Spielfelds."); } }); /* ================================ 4v4 Spielfeld GET /arena/4v4 ================================ */ router.get("/4v4", requireLogin, async (req, res) => { const userId = req.session.user.id; const { match: matchId, slot } = req.query; if (!matchId) { return res.render("1v1-battlefield", { title: "4v4 Kampf", matchId: null, mySlot: "team1_player1", player1: req.session?.user?.ingame_name || "Spieler 1", player2: "Gegner", player1hp: 20, player1mana: 3, player2hp: 20, player2mana: 3, }); } try { const [[me]] = await db.query("SELECT ingame_name FROM accounts WHERE id = ?", [userId]); const { hp, mana } = await getPlayerStats(userId); res.render("1v1-battlefield", { title: "⚔️ 4v4 Kampf", matchId, mySlot: slot || "team1_player1", player1: me?.ingame_name || "Du", player2: "Gegner", player1hp: hp, player1mana: mana, player2hp: 20, player2mana: 3, }); } catch (err) { console.error("[Arena /4v4]", err); res.status(500).send("Fehler beim Laden des Spielfelds."); } }); module.exports = router;