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 ======================== */ /* HP-Formel: 20 + (level-1)*2 | Level 1=20, Level 50=118 */ function calcAvatarHp(level) { return 20 + (Math.max(1, Math.min(50, level || 1)) - 1) * 2; } async function getPlayerStats(userId) { try { const [[acc]] = await db.query( "SELECT level FROM accounts WHERE id = ?", [userId] ); return { hp: calcAvatarHp(acc?.level ?? 1), mana: 3 }; } catch { return { hp: 20, mana: 3 }; } } /* ================================ 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."); } }); module.exports = router;