#!/usr/bin/env bash
#
# Migration du backlog (backlog.txt) vers des issues GitHub.
# Repo cible : mourad-b/event-unified  (remote nommé "gh", pas "origin")
#
# PRÉREQUIS :
#   1. gh installé        -> https://cli.github.com/  (ou: winget install GitHub.cli)
#   2. gh authentifié      -> gh auth login
#   3. Lancer depuis la racine du projet :  bash scripts/migrate-backlog-to-issues.sh
#
# Le script :
#   - crée les labels (client / type / priorité) s'ils n'existent pas (idempotent)
#   - crée une issue par ligne du backlog, avec ses labels
#   - DRY-RUN par défaut : il AFFICHE ce qu'il ferait sans rien créer.
#     Pour créer réellement :  DRY_RUN=0 bash scripts/migrate-backlog-to-issues.sh
#
set -euo pipefail

REPO="mourad-b/event-unified"
DRY_RUN="${DRY_RUN:-1}"   # 1 = simulation (défaut), 0 = création réelle

# ---------------------------------------------------------------------------
# Garde-fous
# ---------------------------------------------------------------------------
if ! command -v gh >/dev/null 2>&1; then
  echo "ERREUR: 'gh' n'est pas installé. Installe GitHub CLI puis 'gh auth login'." >&2
  exit 1
fi
if ! gh auth status >/dev/null 2>&1; then
  echo "ERREUR: gh non authentifié. Lance: gh auth login" >&2
  exit 1
fi

run() {  # exécute ou simule
  if [ "$DRY_RUN" = "0" ]; then
    eval "$@"
  else
    echo "[DRY-RUN] $*"
  fi
}

# ---------------------------------------------------------------------------
# 1) Labels  (nom|couleur|description)
# ---------------------------------------------------------------------------
echo "== Création des labels =="
labels=(
  # Clients
  "client:mediknode|1f6feb|Client MEDIKNODE"
  "client:fpi|0e8a16|Client FPI"
  "client:kea|0e8a16|Client KOL AL ARAB"
  "client:13monastir|0e8a16|Client 13 MONASTIR"
  "client:jpt|0e8a16|Client JPT"
  "client:agob|0e8a16|Client AGOB"
  "client:atmfm|0e8a16|Client ATMFM"
  "client:tusamed|0e8a16|Client TUSAMED"
  "client:divers|6e7681|Divers / transverse"
  # Types
  "type:bug|d73a4a|Correction de bug"
  "type:feature|a2eeef|Nouvelle fonctionnalité"
  "type:import-export|fbca04|Import / Export Excel"
  "type:infra|c5def5|Infra / déploiement / outillage"
  "type:data|d4c5f9|Nettoyage / migration de données"
  "type:perso|ededed|Tâche personnelle (hors code)"
  "type:question|cc317c|À clarifier avant de coder"
  # Priorités
  "P0|b60205|Critique / bloquant"
  "P1|d93f0b|Important"
  "P2|fbca04|Utile"
  "P3|0e8a16|Nice-to-have"
)
for l in "${labels[@]}"; do
  IFS='|' read -r name color desc <<< "$l"
  run "gh label create \"$name\" --color \"$color\" --description \"$desc\" --repo \"$REPO\" --force"
done

# ---------------------------------------------------------------------------
# 2) Issues
#    Format d'une entrée :  "Titre@@client:xxx,type:yyy,Pn"
#    (libellés ré-encodés proprement en français)
# ---------------------------------------------------------------------------
echo "== Création des issues =="
issues=(
# --- MEDIKNODE ---
"Ajouter un modèle d'import de documents (XLSX)@@client:mediknode,type:import-export,P2"
"Frontend - prix chambre hôtel à 2 décimales@@client:mediknode,type:feature,P2"
"Affichage de l'info prise en charge@@client:mediknode,type:feature,P2"
"Ajouter has_evaluation au formulaire d'édition d'événement@@client:mediknode,type:feature,P1"
"Mhamed - attestations (à préciser)@@client:mediknode,type:question,P2"
"Vérifier et afficher les preuves de paiement@@client:mediknode,type:feature,P1"
"Voir les détails en mode mobile@@client:mediknode,type:feature,P1"
"Tester les VPS pour l'envoi d'emails@@client:mediknode,type:question,P2"
"Step 0 : modifier le profil avant inscription@@client:mediknode,type:feature,P1"
"Monitoring avec notification par mail@@client:mediknode,type:feature,P1"
"Nettoyage physique des documents (orphelins)@@client:mediknode,type:data,P2"
"Mobile render (périmètre à délimiter)@@client:mediknode,type:question,P1"
"Mail hébergement confirmation depuis la DB uniquement@@client:mediknode,type:feature,P2"
"Interdire (.) ou espace pour les autres domaines@@client:mediknode,type:feature,P2"
"Contrôle de validité de la table participant_workshop@@client:mediknode,type:data,P2"
"Hébergement : tableau récap à l'étape confirmation@@client:mediknode,type:feature,P1"
"Hébergement : gérer enfants et bébés@@client:mediknode,type:feature,P1"
"Exposant : limitation du nombre de badges@@client:mediknode,type:feature,P2"
"FRONT : redirection vers les bons événements@@client:mediknode,type:bug,P1"
"Frontend - générer attestation d'adhésion@@client:mediknode,type:feature,P1"
"Frontend - générer reçu de paiement@@client:mediknode,type:feature,P1"
"Ouverture/fermeture auto par date (abstracts + prix)@@client:mediknode,type:feature,P1"
"Supprimer/annuler participation => notifications@@client:mediknode,type:feature,P1"
"Vérifier titre de qualité + titre académique@@client:mediknode,type:feature,P2"
"Mhamed - Google Analytics + SEO + sitemap@@client:mediknode,type:feature,P2"
"Export des utilisateurs depuis la DB MEDIKNODE@@client:mediknode,type:import-export,P2"
"Workshop : 2 stocks (réel et affiché)@@client:mediknode,type:feature,P1"
"Tester l'API de Sami (à préciser)@@client:mediknode,type:question,P2"
"Tester l'intégrité référentielle à la suppression@@client:mediknode,type:feature,P1"
"Quiz app - type Slido (gros projet)@@client:mediknode,type:feature,P3"
"Notification abstracts approuvés@@client:mediknode,type:feature,P1"
"Notifier lors de l'ajout d'un nouvel utilisateur@@client:mediknode,type:feature,P2"
"Pas de delete physique (soft delete généralisé)@@client:mediknode,type:feature,P0"
"Import : refuser même téléphone ou email@@client:mediknode,type:import-export,P1"
"Migration 5CNMGF (à préciser)@@client:mediknode,type:question,P2"
"Mettre le soft delete dans tous les modèles@@client:mediknode,type:feature,P0"
"Pré-import participant + suppression de document par import@@client:mediknode,type:import-export,P2"
"Force import + import pour validé + import Presse@@client:mediknode,type:import-export,P2"
"Import : vérifier que NOM et PRENOM coïncident@@client:mediknode,type:import-export,P2"
"Import : forcer la présence d'atelier@@client:mediknode,type:import-export,P2"
"Email lors du changement de l'abstract@@client:mediknode,type:feature,P2"
"Nettoyage data - Ville des demandes d'infos@@client:mediknode,type:data,P3"
"Vérifier dashboard bon de commande anciens events@@client:mediknode,type:bug,P2"
"Vérifier email valide dans le BO@@client:mediknode,type:feature,P2"
"Gestion adhésion années 2024/2023@@client:mediknode,type:feature,P2"
"Améliorer import attestations + participants@@client:mediknode,type:import-export,P2"
"Hébergement : capacité + plateforme@@client:mediknode,type:feature,P1"
"Timeline sur le dashboard@@client:mediknode,type:feature,P2"
"Events inactifs : ni mail register ni confirm@@client:mediknode,type:feature,P1"
"État financier (type demande Salma)@@client:mediknode,type:question,P1"
"Nettoyage documents (SELECT count...)@@client:mediknode,type:data,P2"
"Import : vérifier que le pays existe@@client:mediknode,type:import-export,P2"
"Présence session masterclass + multiple@@client:mediknode,type:feature,P1"
"Salma - problème pièce jointe (à reproduire)@@client:mediknode,type:bug,P2"
"Logger chaque import dans un fichier@@client:mediknode,type:import-export,P1"
"Mail aux inscrits en mode ajout + renvoi@@client:mediknode,type:feature,P1"
"Supprimer les documents pour noms congressistes@@client:mediknode,type:data,P2"
"Nouveau design des stats (Mhamed)@@client:mediknode,type:feature,P2"
"Plateforme sponsors (prise en charge)@@client:mediknode,type:feature,P2"
"Code de validation d'événement (tokens)@@client:mediknode,type:feature,P2"
"Module UX : attestation / documents@@client:mediknode,type:feature,P1"
"Refactor import users + ajout métadonnées@@client:mediknode,type:import-export,P1"
"Participations à faux total + interface de contrôle des totaux@@client:mediknode,type:bug,P1"
"App de scan MEDIKNODE (à cadrer)@@client:mediknode,type:question,P2"
"Création de compte - autolog si mail existant@@client:mediknode,type:feature,P1"
"Bouton annuler validation ne fonctionne pas@@client:mediknode,type:bug,P1"
"Test mail ne fonctionne pas@@client:mediknode,type:bug,P1"
"Souci export gestion - tester BLS workshop@@client:mediknode,type:bug,P2"
"Création de badges pour les événements en cours@@client:mediknode,type:feature,P1"
"Supprimer les __events de test@@client:mediknode,type:data,P3"
"Embellir l'export des abstracts@@client:mediknode,type:import-export,P2"
"Nettoyer les données MEDIKNODE (à préciser)@@client:mediknode,type:question,P2"
"Configurer events@mediknode.com@@client:mediknode,type:infra,P3"
# --- FPI ---
"FPI - news + programme@@client:fpi,type:feature,P2"
"FPI - todos Dhamir : news partenaire@@client:fpi,type:question,P2"
"FPI - TPE / paiement en ligne (register + booking)@@client:fpi,type:feature,P1"
"FPI - clean codebase + commit diff #6@@client:fpi,type:infra,P2"
"FPI - ajouter les instances avec Laaroussi@@client:fpi,type:infra,P2"
"FPI - archiver le code sur GitHub@@client:fpi,type:infra,P3"
"FPI - faire mon CV@@client:fpi,type:perso,P3"
"FPI - réparer le PC IPGETS@@client:fpi,type:perso,P3"
"FPI - supprimer les comptes print@@client:fpi,type:infra,P3"
# --- KOL AL ARAB ---
"KEA - mise à jour@@client:kea,type:question,P2"
"KEA - ajouter RIB + lier inscription et booking@@client:kea,type:feature,P1"
"KEA - mail participation TN et non-TN@@client:kea,type:feature,P2"
"KEA - mode paiement non pré-coché + renseigner mode manquant@@client:kea,type:feature,P2"
"KEA - module de transfert dans le BO@@client:kea,type:feature,P2"
"KEA - export des données@@client:kea,type:import-export,P2"
"KEA - configurer information@kol-el-arab-tunis.com@@client:kea,type:infra,P2"
# --- 13 MONASTIR ---
"13MONASTIR - bouton abstract + hébergement en fin de processus@@client:13monastir,type:feature,P1"
"13MONASTIR - pages comités + export@@client:13monastir,type:feature,P2"
"13MONASTIR - fermer hébergement + export 13JMFM@@client:13monastir,type:feature,P2"
# --- JPT ---
"JPT - news + update + upgrade vers Unified@@client:jpt,type:feature,P2"
"JPT - post event (2h)@@client:jpt,type:feature,P2"
"JPT - config BREVO + désactiver BREVO@@client:jpt,type:infra,P2"
"JPT - règle numéro badge + prestataire + influencer@@client:jpt,type:feature,P2"
# --- AGOB ---
"AGOB - 5min to convince + vidéo Google Drive@@client:agob,type:perso,P3"
"AGOB - hébergement + stats + webhooks@@client:agob,type:feature,P2"
"AGOB - ouvrir hébergement + RIB en footer@@client:agob,type:feature,P2"
"AGOB - ajouter délai + conditions@@client:agob,type:feature,P2"
"AGOB - prompt Claude : Google Drive@@client:agob,type:perso,P3"
# --- ATMFM / TUSAMED ---
"ATMFM - page comité@@client:atmfm,type:feature,P2"
"TUSAMED - désactiver BREVO + mise à jour@@client:tusamed,type:infra,P2"
# --- DIVERS ---
"Mhamed - tâches mails (à préciser)@@client:divers,type:question,P2"
"Mise à jour CONV + corporate@@client:divers,type:feature,P2"
"Tester mail reprise hébergement avec voucher@@client:divers,type:bug,P1"
"Demander à ChatGPT la meilleure archi storage/images@@client:divers,type:infra,P3"
"Mailing avec table doctors + liste de mails@@client:divers,type:feature,P2"
"Envoi de SMS avec liste de téléphones@@client:divers,type:feature,P2"
"Répondre Maher + déployer SwiftFlow@@client:divers,type:perso,P3"
"kouaichi.com + import presse + envoi communiqué@@client:divers,type:feature,P2"
"Check Whois pour tous les domaines@@client:divers,type:infra,P3"
"QR Code fond transparent + dans le mail@@client:divers,type:feature,P1"
"Toujours afficher bouton hébergement + abstract@@client:divers,type:feature,P2"
"Boutons abstracts toujours ouverts@@client:divers,type:feature,P2"
"leo event + 414 event@@client:divers,type:feature,P2"
"Check VPS e-pirana + wincard pour Maher@@client:divers,type:infra,P3"
"W : Elepho (à préciser)@@client:divers,type:question,P3"
"Comparer tusamed / FPI : listing des points@@client:divers,type:question,P2"
"Créer JPT avec le codebase Unified@@client:divers,type:feature,P2"
"App MEDIKNODE ? + refaire module hébergement ?@@client:divers,type:question,P2"
"Konnect - Flouci - paiement en ligne@@client:divers,type:feature,P1"
"Les BO ne doivent pas être indexés@@client:divers,type:feature,P1"
"Préparer le meeting avec ADN@@client:divers,type:perso,P3"
"Commit projet sur Bitbucket + supprimer le hard-code@@client:divers,type:infra,P2"
"Aucune liste en dur (gouvernorat + mode + pays + specialty)@@client:divers,type:feature,P1"
"Réservation : nouvelle feature (dispo - discount - règles)@@client:divers,type:feature,P2"
"Requête de nettoyage des bookings obsolètes@@client:divers,type:data,P2"
"Comparateur para + liste des sites para@@client:divers,type:question,P3"
"Gérer robots.txt -> sitemap (par site)@@client:divers,type:feature,P2"
"GM - General Metal : notification si échec@@client:divers,type:feature,P2"
"Clean CRONOS + utiliser GitPilot@@client:divers,type:infra,P3"
"JPC - génération de code (6h)@@client:divers,type:question,P2"
"Lire tous les mails de Maher (1h)@@client:divers,type:perso,P3"
"Déployer le webhook@@client:divers,type:infra,P2"
)

count=0
for entry in "${issues[@]}"; do
  title="${entry%@@*}"
  rawlabels="${entry##*@@}"
  # construit les arguments --label
  labelargs=""
  IFS=',' read -ra arr <<< "$rawlabels"
  for lb in "${arr[@]}"; do
    labelargs="$labelargs --label \"$lb\""
  done
  run "gh issue create --repo \"$REPO\" --title \"$title\" --body \"Importé depuis backlog.txt\" $labelargs"
  count=$((count+1))
done

echo "== Terminé : $count issues ${DRY_RUN:+(simulation)} =="
if [ "$DRY_RUN" != "0" ]; then
  echo ">> C'était une SIMULATION. Pour créer réellement : DRY_RUN=0 bash scripts/migrate-backlog-to-issues.sh"
fi
