const express = require('express');
const Database = require('better-sqlite3');
const auth = require('../middleware/authMiddleware');

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

/* Übersicht */
router.get('/', auth, (req, res) => {
    const vertragsarten = db
        .prepare('SELECT * FROM vertragsarten ORDER BY id ASC')
        .all();

    res.render('contracts', { vertragsarten });
});

/* Neu anlegen */
router.post('/create', auth, (req, res) => {
    const { name, laufzeit, betrag, aktiv, beschreibung } = req.body;

    db.prepare(`
    INSERT INTO vertragsarten
    (name, beschreibung, laufzeit, betrag, aktiv)
    VALUES (?, ?, ?, ?, ?)
`).run(
    name,
    beschreibung,
    laufzeit,
    betrag,
    aktiv ? 1 : 0    
);


    res.redirect('/contracts');
});

// Vertragsart aktiv / inaktiv setzen
router.post('/toggle/:id', auth, (req, res) => {
    const { id } = req.params;

    db.prepare(`
        UPDATE vertragsarten
        SET aktiv = CASE
            WHEN aktiv = 1 THEN 0
            ELSE 1
        END
        WHERE id = ?
    `).run(id);

    res.redirect('/contracts');
});

// Vertragsart deaktivieren + User migrieren
router.post('/deactivate/:id', auth, (req, res) => {
    const oldId = req.params.id;
    const { newContractId } = req.body;

    if (!newContractId) {
        return res.status(400).send('Neue Vertragsart fehlt');
    }

    const tx = db.transaction(() => {

        // 1️⃣ Alle User auf neue Vertragsart umstellen
        db.prepare(`
            UPDATE users
            SET vertragsvariante = ?
            WHERE vertragsvariante = ?
        `).run(newContractId, oldId);

        // 2️⃣ Alte Vertragsart deaktivieren
        db.prepare(`
            UPDATE vertragsarten
            SET aktiv = 0
            WHERE id = ?
        `).run(oldId);

    });

    tx();

    res.redirect('/contracts');
});

// Öffentliche Vertragsauswahl – für ALLE Besucher
router.get('/select', (req, res) => {
    const vertragsarten = db.prepare(`
        SELECT *
        FROM vertragsarten
        WHERE aktiv = 1
        ORDER BY betrag ASC
    `).all();

    res.render('contractsSelect', { vertragsarten });
});


const PDFDocument = require('pdfkit');

router.get('/pdf/:id', (req, res) => {
    const v = db.prepare(`
        SELECT *
        FROM vertragsarten
        WHERE id = ? AND aktiv = 1
    `).get(req.params.id);

    if (!v) {
        return res.status(404).send('Vertrag nicht gefunden');
    }

    const doc = new PDFDocument();
    res.setHeader('Content-Type', 'application/pdf');
    res.setHeader(
        'Content-Disposition',
        `inline; filename=vertrag_${v.name}.pdf`
    );

    doc.pipe(res);

    doc.fontSize(20).text(`Vertrag: ${v.name}`, { align: 'center' });
    doc.moveDown();

    doc.fontSize(12)
        .text(`Laufzeit: ${v.laufzeit} Monate`)
        .text(`Betrag: ${v.betrag.toFixed(2)} € / Monat`)
        .moveDown();

    doc.text(v.beschreibung || 'Keine weitere Beschreibung.');

    doc.end();
});



module.exports = router;
