/// Système d'identité chromatique par module — UnionFlow
///
/// Chaque module/section de l'application possède :
///   • Une couleur primaire distinctive (WCAG AA validée)
///   • Un gradient directionnel (foncé → clair)
///   • Une couleur de container claire (fonds, badges)
///   • La couleur sur laquelle écrire en blanc
///
/// Principe : quand l'utilisateur entre dans un écran d'un module,
/// le top bar reflète intelligemment la couleur de ce module.
library module_colors;

import 'package:flutter/material.dart';
import 'app_colors.dart';

class ModuleColors {
  ModuleColors._();

  // ═══════════════════════════════════════════════════════════════════════════
  // ORGANISATIONS — Bleu primaire UnionFlow  [5.7:1 ✅]
  // Bouton dashboard : Icons.business_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color organisations = Color(0xFF2563EB);
  static const Color organisationsDark = Color(0xFF1D4ED8);
  static const Color organisationsLight = Color(0xFFEFF6FF);
  static const Color organisationsOnColor = AppColors.onGradient;
  static const List<Color> organisationsGradient = [Color(0xFF1D4ED8), Color(0xFF2563EB)];

  // ═══════════════════════════════════════════════════════════════════════════
  // MEMBRES — Violet accent  [4.8:1 ✅ pour texte]
  // Bouton dashboard : Icons.people_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color membres = Color(0xFF7616E8);
  static const Color membresDark = Color(0xFF5B0FBA);
  static const Color membresLight = Color(0xFFF3ECFF);
  static const Color membresOnColor = AppColors.onGradient;
  static const List<Color> membresGradient = [Color(0xFF5B0FBA), Color(0xFF7616E8)];

  // ═══════════════════════════════════════════════════════════════════════════
  // COTISATIONS / FINANCE — Ambre doré  [5.8:1 ✅]
  // Bouton dashboard : Icons.payments_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color cotisations = Color(0xFFB45309);
  static const Color cotisationsDark = Color(0xFF92400E);
  static const Color cotisationsLight = Color(0xFFFEF3C7);
  static const Color cotisationsOnColor = AppColors.onGradient;
  static const List<Color> cotisationsGradient = [Color(0xFF92400E), Color(0xFFB45309)];

  // ═══════════════════════════════════════════════════════════════════════════
  // ÉVÉNEMENTS — Terracotta vibrant
  // Bouton dashboard : Icons.event_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color evenements = Color(0xFFD4551C);
  static const Color evenementsDark = Color(0xFFB84315);
  static const Color evenementsLight = Color(0xFFFFF3F0);
  static const Color evenementsOnColor = AppColors.onGradient;
  static const List<Color> evenementsGradient = [Color(0xFFB84315), Color(0xFFD4551C)];

  // ═══════════════════════════════════════════════════════════════════════════
  // SOLIDARITÉ / AIDE — Rouge compassion  [4.5:1 ✅]
  // Bouton dashboard : Icons.favorite_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color solidarite = Color(0xFFDC2626);
  static const Color solidariteDark = Color(0xFFB91C1C);
  static const Color solidariteLight = Color(0xFFFEF2F2);
  static const Color solidariteOnColor = AppColors.onGradient;
  static const List<Color> solidariteGradient = [Color(0xFFB91C1C), Color(0xFFDC2626)];

  // ═══════════════════════════════════════════════════════════════════════════
  // ÉPARGNE — Vert croissance  [6.6:1 ✅]
  // Bouton dashboard : Icons.savings_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color epargne = Color(0xFF15803D);
  static const Color epargneDark = Color(0xFF166534);
  static const Color epargneLight = Color(0xFFF0FDF4);
  static const Color epargneOnColor = AppColors.onGradient;
  static const List<Color> epargneGradient = [Color(0xFF166534), Color(0xFF15803D)];

  // ═══════════════════════════════════════════════════════════════════════════
  // ADHÉSIONS — Émeraude  [4.8:1 ✅]
  // Bouton dashboard : Icons.how_to_reg_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color adhesions = Color(0xFF047857);
  static const Color adhesionsDark = Color(0xFF065F46);
  static const Color adhesionsLight = Color(0xFFECFDF5);
  static const Color adhesionsOnColor = AppColors.onGradient;
  static const List<Color> adhesionsGradient = [Color(0xFF065F46), Color(0xFF047857)];

  // ═══════════════════════════════════════════════════════════════════════════
  // COMMUNICATION — Cyan dynamique
  // Bouton dashboard : Icons.chat_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color communication = Color(0xFF0891B2);
  static const Color communicationDark = Color(0xFF0E7490);
  static const Color communicationLight = Color(0xFFECFEFF);
  static const Color communicationOnColor = AppColors.onGradient;
  static const List<Color> communicationGradient = [Color(0xFF0E7490), Color(0xFF0891B2)];

  // ═══════════════════════════════════════════════════════════════════════════
  // RAPPORTS / ANALYTICS — Indigo analytique
  // Bouton dashboard : Icons.analytics_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color rapports = Color(0xFF4338CA);
  static const Color rapportsDark = Color(0xFF3730A3);
  static const Color rapportsLight = Color(0xFFEEF2FF);
  static const Color rapportsOnColor = AppColors.onGradient;
  static const List<Color> rapportsGradient = [Color(0xFF3730A3), Color(0xFF4338CA)];

  // ═══════════════════════════════════════════════════════════════════════════
  // PROFIL — Gradient signature logo (identité personnelle)
  // Bouton dashboard : Icons.person_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color profil = Color(0xFF7616E8);
  static const Color profilDark = Color(0xFF297FFF);
  static const Color profilLight = Color(0xFFF3ECFF);
  static const Color profilOnColor = AppColors.onGradient;
  static const List<Color> profilGradient = [Color(0xFF297FFF), Color(0xFF7616E8)];

  // ═══════════════════════════════════════════════════════════════════════════
  // SYSTÈME / ADMIN — Navy autorité
  // Bouton dashboard : Icons.settings_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color systeme = Color(0xFF1E293B);
  static const Color systemeDark = Color(0xFF0F172A);
  static const Color systemeLight = Color(0xFFF1F5F9);
  static const Color systemeOnColor = AppColors.onGradient;
  static const List<Color> systemeGradient = [Color(0xFF0F172A), Color(0xFF1E293B)];

  // ═══════════════════════════════════════════════════════════════════════════
  // BACKUP — Ambre attention
  // Bouton dashboard : Icons.backup_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color backup = Color(0xFFD97706);
  static const Color backupDark = Color(0xFFB45309);
  static const Color backupLight = Color(0xFFFEF3C7);
  static const Color backupOnColor = AppColors.onGradient;
  static const List<Color> backupGradient = [Color(0xFFB45309), Color(0xFFD97706)];

  // ═══════════════════════════════════════════════════════════════════════════
  // LOGS / MONITORING — Slate technique
  // Bouton dashboard : Icons.terminal_rounded
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color logs = Color(0xFF475569);
  static const Color logsDark = Color(0xFF334155);
  static const Color logsLight = Color(0xFFF8FAFC);
  static const Color logsOnColor = AppColors.onGradient;
  static const List<Color> logsGradient = [Color(0xFF334155), Color(0xFF475569)];

  // ═══════════════════════════════════════════════════════════════════════════
  // NOTIFICATIONS — Violet vif
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color notifications = Color(0xFF6366F1);
  static const Color notificationsDark = Color(0xFF4F46E5);
  static const Color notificationsLight = Color(0xFFEEF2FF);
  static const Color notificationsOnColor = AppColors.onGradient;
  static const List<Color> notificationsGradient = [Color(0xFF4F46E5), Color(0xFF6366F1)];

  // ═══════════════════════════════════════════════════════════════════════════
  // PARAMÈTRES — Slate neutre
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color parametres = Color(0xFF334155);
  static const Color parametresDark = Color(0xFF1E293B);
  static const Color parametresLight = Color(0xFFF1F5F9);
  static const Color parametresOnColor = AppColors.onGradient;
  static const List<Color> parametresGradient = [Color(0xFF1E293B), Color(0xFF334155)];

  // ═══════════════════════════════════════════════════════════════════════════
  // FINANCE WORKFLOW (Approbations, Budgets)
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color financeWorkflow = Color(0xFF0F766E);
  static const Color financeWorkflowDark = Color(0xFF134E4A);
  static const Color financeWorkflowLight = Color(0xFFF0FDFA);
  static const Color financeWorkflowOnColor = AppColors.onGradient;
  static const List<Color> financeWorkflowGradient = [Color(0xFF134E4A), Color(0xFF0F766E)];

  // ═══════════════════════════════════════════════════════════════════════════
  // AIDE / SUPPORT
  // ═══════════════════════════════════════════════════════════════════════════

  static const Color support = Color(0xFF2563EB);
  static const Color supportDark = Color(0xFF1D4ED8);
  static const Color supportLight = Color(0xFFEFF6FF);
  static const Color supportOnColor = AppColors.onGradient;
  static const List<Color> supportGradient = [Color(0xFF1D4ED8), Color(0xFF2563EB)];

  // ═══════════════════════════════════════════════════════════════════════════
  // UTILITAIRES
  // ═══════════════════════════════════════════════════════════════════════════

  /// Retourne le gradient LinearGradient depuis la liste de couleurs d'un module
  static LinearGradient gradient(
    List<Color> colors, {
    AlignmentGeometry begin = Alignment.centerLeft,
    AlignmentGeometry end = Alignment.centerRight,
  }) {
    return LinearGradient(colors: colors, begin: begin, end: end);
  }

  /// Retourne le gradient vertical (pour AppBar)
  static LinearGradient verticalGradient(List<Color> colors) =>
      gradient(colors, begin: Alignment.topLeft, end: Alignment.bottomRight);
}
