const express = require('express');
const Database = require('better-sqlite3');
const auth = require('../middleware/authMiddleware');
const { encrypt, decrypt } = require('../utils/crypto');
const generateVertragsnummer = require('../utils/vertragsnummer');

const db = new Database('plusfit.db');
const router = express.Router();

/* =========================
   Dashboard
   ========================= */
router.get('/dashboard', auth, (req, res) => {
    res.render('dashboard');
});

/* =========================
   User anlegen – Formular
   ========================= */
router.get('/create', auth, (req, res) => {
    res.render('createUser');
});

/* =========================
   User anlegen – SPEICHERN
   ========================= */
router.post('/create', auth, (req, res) => {
    const u = req.body;

    const vertragsnummer = generateVertragsnummer();

    const iban = encrypt(u.iban);
    const bic = encrypt(u.bic);

    const widerrufBis = new Date();
    widerrufBis.setDate(widerrufBis.getDate() + 14);

    db.prepare(`
        INSERT INTO users (
            vertragsnummer,
            vertragsvariante,

            vorname, nachname, geburtsdatum,
            strasse, hausnummer, plz, ort, land,
            mobil, telefon, email,

            kontoinhaber, iban, bic, mandatsreferenz,

            status,
            widerruf_moeglich_bis,
            gesperrt
        ) VALUES (
            ?,?,
            ?,?,?,
            ?,?,?,?,?,
            ?,?,?,
            ?,?,?,?,
            ?,?,
            0
        )
    `).run(
        vertragsnummer,
        u.vertragsvariante,

        u.vorname, u.nachname, u.geburtsdatum,
        u.strasse, u.hausnummer, u.plz, u.ort, u.land,
        u.mobil, u.telefon, u.email,

        u.kontoinhaber,
        iban,
        bic,
        u.mandatsreferenz,

        'aktiv',
        widerrufBis.toISOString()
    );

    res.redirect('/users/list');
});

/* =========================
   Mitgliederübersicht (AKTIV)
   ========================= */
router.get('/list', auth, (req, res) => {
    const search = req.query.q || '';

    const users = db.prepare(`
        SELECT *
        FROM users
        WHERE status = 'aktiv'
          AND (
            vorname LIKE ?
            OR nachname LIKE ?
            OR email LIKE ?
            OR ort LIKE ?
            OR vertragsnummer LIKE ?
          )
        ORDER BY created_at DESC
    `).all(
        `%${search}%`,
        `%${search}%`,
        `%${search}%`,
        `%${search}%`,
        `%${search}%`
    );

    res.render('userList', { users, search });
});

/* =========================
   User bearbeiten – FORMULAR
   ========================= */
router.get('/edit/:id', auth, (req, res) => {
    const user = db.prepare(`
        SELECT *
        FROM users
        WHERE id = ?
          AND status = 'aktiv'
    `).get(req.params.id);

    if (!user) {
        return res
            .status(404)
            .send('User nicht gefunden oder Vertrag nicht aktiv');
    }

    user.iban = decrypt(user.iban);
    user.bic = decrypt(user.bic);

    res.render('editUser', { user });
});

/* =========================
   User bearbeiten – SPEICHERN
   ========================= */
router.post('/edit/:id', auth, (req, res) => {
    const u = req.body;

    const iban = encrypt(u.iban);
    const bic = encrypt(u.bic);

    db.prepare(`
        UPDATE users SET
            vertragsvariante = ?,

            vorname = ?, nachname = ?, geburtsdatum = ?,
            strasse = ?, hausnummer = ?, plz = ?, ort = ?, land = ?,
            mobil = ?, telefon = ?, email = ?,

            kontoinhaber = ?, iban = ?, bic = ?, mandatsreferenz = ?,
            gesperrt = ?
        WHERE id = ?
          AND status = 'aktiv'
    `).run(
        u.vertragsvariante,

        u.vorname, u.nachname, u.geburtsdatum,
        u.strasse, u.hausnummer, u.plz, u.ort, u.land,
        u.mobil, u.telefon, u.email,

        u.kontoinhaber,
        iban,
        bic,
        u.mandatsreferenz,

        u.gesperrt ? 1 : 0,
        req.params.id
    );

    res.redirect('/users/list');
});

module.exports = router;
