import { Router } from 'express';
import db from '../db/index.js';

const router = Router();

/* ── GET /api/plateforme-tax/:platId/:annee
   Retourne l'enregistrement pour l'année.
   S'il n'existe pas, clone depuis N-1 (ou crée vide). ── */
router.get('/:platId/:annee', (req, res) => {
  const platId = Number(req.params.platId);
  const annee  = Number(req.params.annee);

  // Vérifier que la plateforme appartient à l'utilisateur
  const plat = db.prepare('SELECT id, nom FROM plateformes WHERE id = ? AND user_id = ?').get(platId, req.user.id);
  if (!plat) return res.status(404).json({ error: 'Plateforme introuvable' });

  let row = db.prepare('SELECT * FROM plateforme_tax_details WHERE plateforme_id = ? AND annee = ?').get(platId, annee);

  if (!row) {
    // Chercher l'année précédente
    const prev = db.prepare(
      'SELECT * FROM plateforme_tax_details WHERE plateforme_id = ? AND annee < ? ORDER BY annee DESC LIMIT 1'
    ).get(platId, annee);

    const raison_sociale = prev?.raison_sociale ?? plat.nom;
    const siret_n        = prev?.siret_n ?? null;
    // siret_n1 = le siret_n de l'année précédente (s'il a changé entre N-1 et N, on le garde)
    const siret_n1       = prev?.siret_n ?? null;

    const r = db.prepare(
      'INSERT INTO plateforme_tax_details (plateforme_id, annee, raison_sociale, siret_n, siret_n1) VALUES (?,?,?,?,?)'
    ).run(platId, annee, raison_sociale, siret_n, siret_n1);

    row = db.prepare('SELECT * FROM plateforme_tax_details WHERE id = ?').get(r.lastInsertRowid);
  }

  res.json(row);
});

/* ── PATCH /api/plateforme-tax/:id — mise à jour des champs ── */
router.patch('/:id', (req, res) => {
  const id = Number(req.params.id);
  const { raison_sociale, siret_n, siret_n1 } = req.body;

  // Vérifier l'appartenance via la plateforme
  const row = db.prepare(`
    SELECT ptd.id FROM plateforme_tax_details ptd
    JOIN plateformes p ON p.id = ptd.plateforme_id
    WHERE ptd.id = ? AND p.user_id = ?
  `).get(id, req.user.id);

  if (!row) return res.status(404).json({ error: 'Enregistrement introuvable' });

  db.prepare(`
    UPDATE plateforme_tax_details
    SET raison_sociale = COALESCE(?, raison_sociale),
        siret_n        = ?,
        siret_n1       = ?
    WHERE id = ?
  `).run(
    raison_sociale !== undefined ? raison_sociale : null,
    siret_n   !== undefined ? siret_n   : null,
    siret_n1  !== undefined ? siret_n1  : null,
    id
  );

  res.json(db.prepare('SELECT * FROM plateforme_tax_details WHERE id = ?').get(id));
});

export default router;
