/**
 * Commentaire de clôture + fermeture issue Gitea #131.
 * Usage: node backend/scripts/close-gitea-issue-131.js
 */
const https = require('https');
const fs = require('fs');
const path = require('path');

const repoRoot = path.join(__dirname, '../..');
const ISSUE = 131;
const REPO = 'jmartin/petitspas';

const body = `## Fermeture ticket #131 — livré sur \`develop\` et \`master\`

Branche **\`feature/131\`** mergée dans **\`develop\`**, puis squash merge **\`develop\` → \`master\`** (déploiement production).

### Fiche parent (dashboard admin)
- Modale **\`AdminParentEditModal\`** éditable dès l'ouverture
- En-tête dynamique : **nom/prénom** + sous-titre **co-parent** (si connu)
- Gélule **statut** modifiable
- **\`PATCH /api/v1/parents/:id/fiche\`** — identité + statut
- **\`GET /api/v1/parents\`** — liste parents (fix décorateur \`@Get()\` manquant)
- Réponses API : \`co_parent\` peuplé, secrets user masqués (\`sanitizeUserForApi\`)
- Liste enfants en bas de fiche + rattachement/détachement

### Fiche AM (dashboard admin)
- Modale **\`AdminAmEditModal\`** — 3 onglets : Identité | Fiche pro | Enfants accueillis
- **\`PATCH /api/v1/assistantes-maternelles/:id/fiche\`** — identité + champs pro (NIR, date/lieu naissance, date agrément, places, disponibilité)
- **\`POST/DELETE …/enfants/:enfantId\`** — rattacher / détacher un enfant
- Grille capacité **\`AdminAmChildrenCapacityGrid\`** (2×2)
- Rattachement enfants **différé jusqu'à Sauvegarder** (pas d'appel API immédiat)

### Back — placement AM ↔ enfant
- Table **\`enfants_assistantes_maternelles\`** (placement temporel, 1 garde active/enfant)
- Enum enfant : \`a_naitre\`, \`garde\`, \`sans_garde\`, \`scolarise\` — **plus \`actif\`**
- Rattachement → statut enfant \`garde\` ; détachement → \`sans_garde\`
- Migration : \`database/migrations/2026_enfants_assistantes_maternelles.sql\`
- Schéma canonique : \`database/BDD.sql\`

### Front — statuts & polish
- **\`enfant_status_utils.dart\`** — libellés/couleurs \`garde\`/\`sans_garde\`
- Mise à jour cartes enfants, modale détail, filtres dashboard

### Correctifs recette
- \`GET /parents\` 404 → ajout \`@Get()\` sur \`getAll()\`
- Sauvegarde AM 400 → alignement DTO \`UpdateAmFicheAdminDto\` sur payload front
- Crash NIR → fix \`toISOString\` + pas d'effacement NIR (colonne NOT NULL)

### Hors périmètre #131 (tickets voisins)
- **#137** onglet Enfants global · **#138** fiche enfant complète · **#115/#116** affiliation avancée

---
*Issue fermée après merge sur \`develop\` + \`master\` et déploiement production.*`;

let token = process.env.GITEA_TOKEN;
if (!token) {
  try {
    const tokenFile = path.join(repoRoot, '.gitea-token');
    if (fs.existsSync(tokenFile)) token = fs.readFileSync(tokenFile, 'utf8').trim();
  } catch (_) {}
}
if (!token) {
  try {
    const briefing = fs.readFileSync(
      path.join(repoRoot, 'docs/27_BRIEFING-FRONTEND.md'),
      'utf8',
    );
    const m = briefing.match(/Token:\s*(giteabu_[a-f0-9]+)/);
    if (m) token = m[1].trim();
  } catch (_) {}
}
if (!token) {
  console.error('Token non trouvé : .gitea-token ou GITEA_TOKEN');
  process.exit(1);
}

function request(method, apiPath, payloadObj) {
  const payload = payloadObj ? JSON.stringify(payloadObj) : null;
  return new Promise((resolve, reject) => {
    const opts = {
      hostname: 'git.ptits-pas.fr',
      path: `/api/v1/repos/${REPO}${apiPath}`,
      method,
      headers: {
        Authorization: 'token ' + token,
        'Content-Type': 'application/json',
        ...(payload ? { 'Content-Length': Buffer.byteLength(payload) } : {}),
      },
    };
    const req = https.request(opts, (res) => {
      let d = '';
      res.on('data', (c) => (d += c));
      res.on('end', () => {
        if (res.statusCode !== 200 && res.statusCode !== 201) {
          reject(new Error(`HTTP ${res.statusCode}: ${d}`));
          return;
        }
        try {
          resolve(d ? JSON.parse(d) : {});
        } catch (_) {
          resolve({});
        }
      });
    });
    req.on('error', reject);
    if (payload) req.write(payload);
    req.end();
  });
}

(async () => {
  try {
    console.log(`POST commentaire issue #${ISSUE}...`);
    await request('POST', `/issues/${ISSUE}/comments`, { body });
    console.log('Commentaire publié.');
    console.log(`PATCH fermeture issue #${ISSUE}...`);
    await request('PATCH', `/issues/${ISSUE}`, { state: 'closed' });
    console.log(`Issue #${ISSUE} fermée.`);
  } catch (e) {
    console.error(e.message || e);
    process.exit(1);
  }
})();
