import type { ReactNode } from "react";
import styles from "./StatusBadge.module.css";

// Couvre les statuts des entités Pubago (voir ENTITIES.md).
const STATUS_MAP: Record<string, { label: string; cls: string }> = {
  // Commande
  EN_ATTENTE: { label: "En attente", cls: styles.warning },
  VALIDEE: { label: "Validée", cls: styles.info },
  EN_PRODUCTION: { label: "En production", cls: styles.info },
  LIVREE: { label: "Livrée", cls: styles.success },
  ANNULEE: { label: "Annulée", cls: styles.danger },

  // Design
  VALIDE: { label: "Validé", cls: styles.success },
  REJETE: { label: "Rejeté", cls: styles.danger },

  // Zone
  LIBRE: { label: "Libre", cls: styles.success },
  RESERVEE: { label: "Réservée", cls: styles.warning },
  OCCUPEE: { label: "Occupée", cls: styles.neutral },

  // Message contact
  NON_LU: { label: "Non lu", cls: styles.warning },
  LU: { label: "Lu", cls: styles.info },
  TRAITE: { label: "Traité", cls: styles.success },

  // Brief design
  RECU: { label: "Reçu", cls: styles.neutral },
  EN_COURS: { label: "En cours", cls: styles.info },
  PROPOSITION_ENVOYEE: { label: "Proposition envoyée", cls: styles.info },

  // Paiement
  SUCCESS: { label: "Réussi", cls: styles.success },
  FAILED: { label: "Échoué", cls: styles.danger },
  PENDING: { label: "En attente", cls: styles.warning },

  // Facture
  PAYEE: { label: "Payée", cls: styles.success },

  // Espace publicitaire / campagne
  ACTIF: { label: "Actif", cls: styles.success },
  TERMINE: { label: "Terminé", cls: styles.neutral },
  TERMINEE: { label: "Terminée", cls: styles.neutral },
  ANNULE: { label: "Annulé", cls: styles.danger },
  PLANIFIEE: { label: "Planifiée", cls: styles.info },

  // Livraison
  ECHEC: { label: "Échec", cls: styles.danger },

  // Abonnement
  SUSPENDU: { label: "Suspendu", cls: styles.warning },
  EXPIRE: { label: "Expiré", cls: styles.danger },

  // Notification
  ENVOYE: { label: "Envoyé", cls: styles.success },
  ECHOUE: { label: "Échoué", cls: styles.danger },
};

interface StatusBadgeProps {
  status: string;
  label?: ReactNode;
}

export default function StatusBadge({ status, label }: StatusBadgeProps) {
  const config = STATUS_MAP[status.toUpperCase()] ?? { label: status, cls: styles.neutral };
  return <span className={`${styles.badge} ${config.cls}`}>{label ?? config.label}</span>;
}
