import 'package:equatable/equatable.dart';

/// Indicateur de conformité avec statut + message explicatif.
class ConformiteIndicateur extends Equatable {
  final String statut; // OK, EN_ATTENTE, RETARD, OPTIONNEL, OBLIGATOIRE, EN_VEILLE
  final String message;

  const ConformiteIndicateur({required this.statut, required this.message});

  @override
  List<Object?> get props => [statut, message];
}

/// Snapshot du tableau de bord de conformité (miroir mobile du record backend).
///
/// Couvre AG annuelle, rapports AIRMS, CMU dirigeants, KYC, formation LBC/FT, UBO,
/// commissaire aux comptes, FOMUS-CI, et le score global agrégé (0-100).
class ComplianceSnapshot extends Equatable {
  final String organisationId;
  final String organisationNom;
  final String referentielComptable;
  final bool complianceOfficerDesigne;
  final ConformiteIndicateur agAnnuelle;
  final ConformiteIndicateur rapportAirms;
  final int dirigeantsAvecCmu;
  final double tauxKycAJourPct;
  final double tauxFormationLbcFtPct;
  final ConformiteIndicateur commissaireAuxComptes;
  final ConformiteIndicateur fomusCi;
  final double couvertureUboPct;
  final int scoreGlobal;

  const ComplianceSnapshot({
    required this.organisationId,
    required this.organisationNom,
    required this.referentielComptable,
    required this.complianceOfficerDesigne,
    required this.agAnnuelle,
    required this.rapportAirms,
    required this.dirigeantsAvecCmu,
    required this.tauxKycAJourPct,
    required this.tauxFormationLbcFtPct,
    required this.commissaireAuxComptes,
    required this.fomusCi,
    required this.couvertureUboPct,
    required this.scoreGlobal,
  });

  /// Couleur indicative selon le score (Material 3 semantic).
  String get scoreSeverite {
    if (scoreGlobal >= 80) return 'success';
    if (scoreGlobal >= 60) return 'warning';
    return 'danger';
  }

  bool get hasAlertesCritiques =>
      !complianceOfficerDesigne ||
      agAnnuelle.statut == 'RETARD' ||
      scoreGlobal < 60;

  @override
  List<Object?> get props => [
        organisationId,
        organisationNom,
        referentielComptable,
        complianceOfficerDesigne,
        agAnnuelle,
        rapportAirms,
        dirigeantsAvecCmu,
        tauxKycAJourPct,
        tauxFormationLbcFtPct,
        commissaireAuxComptes,
        fomusCi,
        couvertureUboPct,
        scoreGlobal,
      ];
}
