/// Devises supportées par UnionFlow (miroir mobile de l'enum backend).
///
/// Les codes ISO-4217 servent aussi d'identifiant pour l'API.
enum Devise {
  xof('XOF', 'Franc CFA Ouest', 'UEMOA'),
  xaf('XAF', 'Franc CFA Centrale', 'CEMAC'),
  eur('EUR', 'Euro', 'EUROPE'),
  usd('USD', 'Dollar US', 'AMERIQUE'),
  gbp('GBP', 'Livre Sterling', 'EUROPE'),
  cad('CAD', 'Dollar Canadien', 'AMERIQUE'),
  chf('CHF', 'Franc Suisse', 'EUROPE'),
  ghs('GHS', 'Cédi Ghanéen', 'CEDEAO'),
  ngn('NGN', 'Naira Nigérian', 'CEDEAO'),
  mad('MAD', 'Dirham Marocain', 'MAGHREB');

  final String code;
  final String libelle;
  final String zone;
  const Devise(this.code, this.libelle, this.zone);

  /// Devise de référence UnionFlow.
  static Devise reference() => Devise.xof;

  /// Parse un code ISO-4217 en {@link Devise}, fallback sur XOF.
  static Devise fromCode(String? code) {
    if (code == null || code.isEmpty) return reference();
    return Devise.values.firstWhere(
      (d) => d.code.toUpperCase() == code.toUpperCase(),
      orElse: () => reference(),
    );
  }

  /// True pour les devises internationales (déclenchent AML international).
  bool get estInternationale => const {
        Devise.eur,
        Devise.usd,
        Devise.gbp,
        Devise.cad,
        Devise.chf,
      }.contains(this);
}
