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(); } /* ================================ 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) => { const userId = req.session.user.id; try { const [[account]] = await db.query( "SELECT id, ingame_name, level FROM accounts WHERE id = ?", [userId], ); 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?.character?.name || req.session?.user?.ingame_name || "Spieler 1", player2: "Gegner", player1hp: 20, player1mana: 3, player2hp: 20, player2mana: 3, }); } try { // Eigene Spielerdaten laden const [[me]] = await db.query( "SELECT ingame_name, level FROM accounts WHERE id = ?", [userId], ); // HP + Mana aus Charakter-Tabelle (falls vorhanden, sonst Defaults) let myHp = 20; let myMana = 3; try { const [[charStats]] = await db.query( "SELECT hp, mana FROM characters WHERE account_id = ?", [userId], ); if (charStats) { myHp = charStats.hp || 20; myMana = charStats.mana || 3; } } catch { // Tabelle existiert evtl. noch nicht – Defaults verwenden } 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 ? myHp : 20, player1mana: isPlayer1 ? myMana : 3, player2hp: isPlayer1 ? 20 : myHp, player2mana: isPlayer1 ? 3 : myMana, }); } catch (err) { console.error("[Arena /1v1]", err); res.status(500).send("Fehler beim Laden des Spielfelds."); } }); /* ================================ 2v2 Spielfeld (Platzhalter) GET /arena/2v2 ================================ */ router.get("/2v2", (req, res) => { res.render("1v1-battlefield", { title: "2v2 Kampf", matchId: null, mySlot: "player1", player1: req.session?.character?.name || "Spieler 1", player2: "Gegner", player1hp: 20, player1mana: 3, player2hp: 20, player2mana: 3, }); }); /* ================================ 4v4 Spielfeld (Platzhalter) GET /arena/4v4 ================================ */ router.get("/4v4", (req, res) => { res.render("1v1-battlefield", { title: "4v4 Kampf", matchId: null, mySlot: "player1", player1: req.session?.character?.name || "Spieler 1", player2: "Gegner", player1hp: 20, player1mana: 3, player2hp: 20, player2mana: 3, }); }); module.exports = router;