# SETUP — TacForce Pro auf XAMPP

Komplette Installation. Rechne mit ~30–45 Min beim ersten Mal.

---

## 0. Voraussetzungen installieren

| Tool | Warum | Link |
|------|-------|------|
| **XAMPP** (PHP 8.2+) | Apache + MySQL/MariaDB | https://www.apachefriends.org |
| **Composer** | PHP-Paketmanager (installiert Laravel) | https://getcomposer.org/download |
| **Node.js 18+** | für den Bot-Worker | https://nodejs.org (hast du: v24 ✅) |
| **Git** (optional) | Versionierung | https://git-scm.com |

Nach der Installation prüfen (neue Konsole öffnen):
```bash
php -v          # sollte PHP 8.2+ zeigen (XAMPP legt php.exe nach C:\xampp\php)
composer -V
node -v
```
> Wenn `php` nicht gefunden wird: `C:\xampp\php` zur Windows-`PATH`-Variable hinzufügen.

**Benötigte PHP-Extensions** (in XAMPP standardmäßig an — in `C:\xampp\php\php.ini` prüfen, `;` entfernen falls auskommentiert):
`pdo_mysql`, `mbstring`, `openssl`, `fileinfo`, `curl`, `bcmath`.

---

## 1. Datenbank anlegen

1. XAMPP-Control-Panel → **Apache** und **MySQL** starten.
2. http://localhost/phpmyadmin öffnen.
3. Neue Datenbank **`tacforce`** anlegen, Kollation `utf8mb4_unicode_ci`.

---

## 2. Discord-App einrichten

1. https://discord.com/developers/applications → **New Application** („TacForce Operator").
2. **OAuth2 → General:**
   - Client ID + Client Secret notieren.
   - **Redirects** hinzufügen: `http://127.0.0.1:8000/auth/discord/callback`
     (und später `https://tacforce.pro/auth/discord/callback`).
3. **Bot-Tab:** *Add Bot* → **Token** kopieren (Reset falls nötig).
   - **Privileged Gateway Intents** aktivieren: **Server Members Intent** + **Message Content Intent**.
4. **General Information:** **Public Key** kopieren.
5. **Bot einladen** (Invite-URL, Rechte: `Manage Channels`, `Manage Roles`, `Send Messages`, `Embed Links`, `Read Message History`, `View Channels`):
   ```
   https://discord.com/oauth2/authorize?client_id=DEINE_CLIENT_ID&scope=bot+applications.commands&permissions=268561488
   ```

---

## 3. Laravel-App einrichten

```bash
cd laravel-app
copy .env.example .env        # Windows (oder: cp .env.example .env)
composer install
php artisan key:generate
```

`.env` öffnen und ausfüllen:
```env
APP_URL=http://127.0.0.1:8000

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tacforce
DB_USERNAME=root
DB_PASSWORD=            # XAMPP-Standard: leer

DISCORD_CLIENT_ID=...
DISCORD_CLIENT_SECRET=...
DISCORD_REDIRECT_URI=http://127.0.0.1:8000/auth/discord/callback
DISCORD_BOT_TOKEN=...   # optional hier; der Bot nutzt seine eigene .env
ADMIN_DISCORD_IDS=DEINE_DISCORD_USER_ID   # damit DU Admin bist
```

Migrationen + Demo-Daten:
```bash
php artisan migrate --seed
```

Starten (einfachste Variante):
```bash
php artisan serve
# → http://127.0.0.1:8000
```

---

## 4. Bot-Worker einrichten

```bash
cd ../bot-worker
copy .env.example .env
npm install
```

`bot-worker/.env`:
```env
APP_KEY=            # ← EXAKT denselben Wert wie in laravel-app/.env kopieren!
DISCORD_TOKEN=...   # Token von TacForce Operator (Fallback, falls DB leer)
DISCORD_CLIENT_ID=...
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tacforce
DB_USER=root
DB_PASSWORD=
```

Slash-Commands registrieren + Bot starten:
```bash
npm run register
npm start
```

> **Wichtig:** `APP_KEY` muss in beiden `.env` identisch sein, sonst kann der Bot verschlüsselte Bot-Tokens aus der DB nicht entschlüsseln (siehe ARCHITECTURE.md §4).

---

## 5. (Optional) Über Apache statt `php artisan serve` ausliefern

Wenn du „richtig" über XAMPP-Apache willst:

1. Projekt nach `C:\xampp\htdocs\tacforce\` kopieren.
2. `C:\xampp\apache\conf\extra\httpd-vhosts.conf` ergänzen:
   ```apache
   <VirtualHost *:80>
       ServerName tacforce.local
       DocumentRoot "C:/xampp/htdocs/tacforce/laravel-app/public"
       <Directory "C:/xampp/htdocs/tacforce/laravel-app/public">
           AllowOverride All
           Require all granted
       </Directory>
   </VirtualHost>
   ```
3. `C:\Windows\System32\drivers\etc\hosts` ergänzen: `127.0.0.1 tacforce.local`
4. In `.env`: `APP_URL=http://tacforce.local` und die Discord-Redirect-URI entsprechend anpassen.
5. Apache neu starten → http://tacforce.local

> Laravel wird immer aus dem `public/`-Ordner ausgeliefert — **nie** den Projektordner direkt als DocumentRoot setzen (Sicherheit).

---

## 6. Produktion (später)

- Tailwind wird aktuell per CDN geladen (null Build-Schritt). Für Produktion: `npm` + Tailwind-CLI zum Kompilieren einer schlanken `app.css` (Anleitung in `laravel-app/DESIGN.md` §Build).
- `APP_DEBUG=false`, `APP_ENV=production`, echte Domain, HTTPS.
- Bot als Dauerdienst: PM2 (`pm2 start npm --name tacforce-bot -- start`) oder Windows-Dienst.

---

## Häufige Fehler

| Symptom | Lösung |
|--------|--------|
| `could not find driver` | `pdo_mysql` in `php.ini` aktivieren, Apache neu starten |
| `SQLSTATE … Access denied` | DB-User/Passwort in `.env` prüfen (XAMPP: `root` / leer) |
| Discord-Login-Fehler „redirect_uri" | Redirect-URI in Discord-App muss **exakt** zur `.env` passen |
| Bot startet, tut aber nichts | `npm run register` ausgeführt? Intents aktiviert? Bot auf Server eingeladen? |
| Bot kann Token nicht entschlüsseln | `APP_KEY` in beiden `.env` identisch? |
