# FoamKing Opsætningsguide

Komplet vejledning til at sætte FoamKing prisberegneren i drift.

---

## 1. Forudsætninger

- **Node.js** 18 eller nyere (20 LTS anbefales)
- **npm** (følger med Node.js)

## 2. Installation

```bash
npm install
```

## 3. Konfiguration af miljøvariabler

Kopier eksempelfilen og udfyld med jeres egne værdier:

```bash
cp .env.example .env.local
```

Åbn `.env.local` i en teksteditor og konfigurer hver sektion som beskrevet nedenfor.

### Admin-login (Påkrævet)

```env
ADMIN_EMAIL=admin@example.com
ADMIN_PASSWORD=changeme
```

Disse oplysninger bruges til at logge ind på `/intern/login`. Skift begge værdier inden I går i produktion.

### E-mail — Office 365 SMTP (Påkrævet)

```env
SMTP_HOST=smtp.office365.com
SMTP_PORT=587
SMTP_USER=tilbud@foamking.dk
SMTP_PASS=your_password_here
EMAIL_FROM_NAME=Foam King Prisberegner
EMAIL_TO=info@foamking.dk
```

Applikationen sender tilbudsforespørgsler via Office 365. For at det virker, skal **SMTP AUTH være aktiveret** på afsenderpostkassen:

1. Gå til **Exchange Admin Center** — [admin.exchange.microsoft.com](https://admin.exchange.microsoft.com)
2. Gå til **Recipients** → **Mailboxes**
3. Vælg postkassen **tilbud@foamking.dk**
4. Klik på **Manage email apps settings** (eller Mail flow → Email apps)
5. Aktivér **Authenticated SMTP (SMTP AUTH)**
6. Gem

> **Bemærk:** Hvis jeres organisation bruger Security Defaults eller Conditional Access-politikker, der blokerer legacy-godkendelse, kan det være nødvendigt at oprette en undtagelse for denne postkasse. Hvis MFA er aktiveret på kontoen, skal I bruge et App Password i stedet for den almindelige adgangskode.

### Base-URL (Påkrævet)

```env
NEXT_PUBLIC_BASE_URL=https://beregner.foamking.dk
```

Bruges når der genereres links i udgående e-mails (f.eks. links til tilbudssider).

### Afstandsberegning (Valgfrit)

```env
OPENROUTE_API_KEY=your_api_key_here
```

Uden denne nøgle bruger applikationen en indbygget afstandstabel baseret på postnumre, hvilket fungerer fint i de fleste tilfælde. Ønsker I mere præcise køreafstande, kan I oprette en gratis API-nøgle på [openrouteservice.org](https://openrouteservice.org/dev/#/signup) (2.000 forespørgsler pr. dag).

## 4. Opret database

```bash
npm run setup
```

Dette opretter SQLite-databasen og de nødvendige tabeller.

## 5. Byg og start

```bash
npm run build
npm start
```

Applikationen starter på **port 3001**.

## 6. Ruteoversigt

| Rute                 | Beskrivelse                                    |
| -------------------- | ---------------------------------------------- |
| `/`                  | Offentlig prisberegner                         |
| `/tilbud/[id]`       | Offentlig tilbudsvisning (link fra e-mail)     |
| `/intern`            | Admin-dashboard — tilbudsstyring               |
| `/intern/historik`   | Admin — tilbudshistorik                        |
| `/intern/beregner`   | Admin — detaljeret beregner med prisopbygning  |
| `/intern/login`      | Admin-loginside                                |

## 7. Tilpasset autentificering

Standardopsætningen bruger miljøvariablerne `ADMIN_EMAIL` og `ADMIN_PASSWORD` med sessioner i hukommelsen. Det er enkelt og tilstrækkeligt til en setup med en enkelt administrator.

Vil I integrere jeres egen autentificering (JWT, OAuth, SSO), skal I redigere **`lib/auth.ts`**. Hele applikationen bruger kun tre funktioner:

- `checkAuth()` — tjekker om den aktuelle forespørgsel er autentificeret
- `login(email, password)` — autentificerer en bruger og opretter en session
- `logout()` — afslutter den aktuelle session

Middlewaren i **`middleware.ts`** tjekker for en session-cookie på alle `/intern/*`-ruter og omdirigerer ikke-autentificerede besøgende til `/intern/login`. Opdater den, hvis I skifter til en anden mekanisme (f.eks. en JWT i en `Authorization`-header).

## 8. Udvikling

```bash
npm run dev        # Start udviklingsserver (port 3001)
npm run build      # Produktionsbuild
npm start          # Start produktionsserver
npm run lint       # Kør ESLint
npm run setup      # Opret / nulstil database
```
