#!/usr/bin/env node
/**
 * Test des endpoints "comptes en attente" (ticket #107).
 *
 * Prérequis : backend démarré (npm run start:dev dans backend/).
 *
 * Usage:
 *   node scripts/test-pending-api.js
 *   TEST_EMAIL=xxx TEST_PASSWORD=yyy node scripts/test-pending-api.js
 *   BASE_URL=https://app.ptits-pas.fr/api/v1 TEST_EMAIL=xxx TEST_PASSWORD=yyy node scripts/test-pending-api.js
 *
 * Sans TEST_EMAIL/TEST_PASSWORD : les GET protégés renverront 401 (normal).
 * Avec un compte gestionnaire ou admin : affiche les listes en attente.
 */

const BASE_URL = process.env.BASE_URL || 'http://localhost:3000/api/v1';
const TEST_EMAIL = process.env.TEST_EMAIL;
const TEST_PASSWORD = process.env.TEST_PASSWORD;

async function request(method, path, body = null, token = null) {
  const url = path.startsWith('http') ? path : `${BASE_URL}${path}`;
  const opts = {
    method,
    headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
  };
  if (token) opts.headers.Authorization = `Bearer ${token}`;
  if (body) opts.body = JSON.stringify(body);
  const res = await fetch(url, opts);
  const text = await res.text();
  let data = null;
  try {
    data = text ? JSON.parse(text) : null;
  } catch (_) {
    data = text;
  }
  return { status: res.status, data };
}

async function main() {
  console.log('Base URL:', BASE_URL);
  console.log('');

  let token = null;
  if (TEST_EMAIL && TEST_PASSWORD) {
    console.log('1. Login...');
    const loginRes = await request('POST', '/auth/login', {
      email: TEST_EMAIL,
      password: TEST_PASSWORD,
    });
    if (loginRes.status !== 200 && loginRes.status !== 201) {
      console.log('   Échec login:', loginRes.status, loginRes.data);
      process.exit(1);
    }
    token = loginRes.data?.access_token ?? loginRes.data?.accessToken ?? null;
    if (!token) {
      console.log('   Réponse login sans token:', JSON.stringify(loginRes.data, null, 2));
      process.exit(1);
    }
    console.log('   OK, token reçu.');
    console.log('');
  } else {
    console.log('TEST_EMAIL / TEST_PASSWORD non définis : les appels protégés vont renvoyer 401.');
    console.log('Exemple: TEST_EMAIL=admin@example.com TEST_PASSWORD=xxx node scripts/test-pending-api.js');
    console.log('');
  }

  console.log('2. GET /users/pending?role=assistante_maternelle');
  const pendingUsersRes = await request(
    'GET',
    '/users/pending?role=assistante_maternelle',
    null,
    token
  );
  console.log('   Status:', pendingUsersRes.status);
  if (pendingUsersRes.status === 200) {
    const list = Array.isArray(pendingUsersRes.data) ? pendingUsersRes.data : [];
    console.log('   Nombre d\'utilisateurs en attente (AM):', list.length);
    list.forEach((u, i) => {
      console.log(
        `   [${i + 1}] id=${u.id} email=${u.email} role=${u.role} statut=${u.statut} numero_dossier=${u.numero_dossier ?? '-'}`
      );
    });
  } else {
    console.log('   Réponse:', JSON.stringify(pendingUsersRes.data, null, 2));
  }
  console.log('');

  console.log('3. GET /parents/pending-families');
  const pendingFamiliesRes = await request('GET', '/parents/pending-families', null, token);
  console.log('   Status:', pendingFamiliesRes.status);
  if (pendingFamiliesRes.status === 200) {
    const list = Array.isArray(pendingFamiliesRes.data) ? pendingFamiliesRes.data : [];
    console.log('   Nombre de familles en attente:', list.length);
    list.forEach((f, i) => {
      console.log(
        `   [${i + 1}] libelle=${f.libelle} parentIds=${JSON.stringify(f.parentIds)} numero_dossier=${f.numero_dossier ?? '-'}`
      );
    });
  } else {
    console.log('   Réponse:', JSON.stringify(pendingFamiliesRes.data, null, 2));
  }

  console.log('');
  console.log('Fin du test.');
}

main().catch((err) => {
  console.error('Erreur:', err.message || err);
  process.exit(1);
});
