/// Modèle pour un item du sélecteur d'organisation.
/// Mappé depuis GET /api/membres/mes-organisations.
library org_switcher_entry;

import 'package:equatable/equatable.dart';

class OrgSwitcherEntry extends Equatable {
  final String organisationId;
  final String nom;
  final String? nomCourt;
  final String typeOrganisation;
  final String? categorieType;
  final String? modulesActifs;
  final String? statut;
  final String? statutMembre;
  final String? roleOrg;
  final String? dateAdhesion;

  const OrgSwitcherEntry({
    required this.organisationId,
    required this.nom,
    this.nomCourt,
    required this.typeOrganisation,
    this.categorieType,
    this.modulesActifs,
    this.statut,
    this.statutMembre,
    this.roleOrg,
    this.dateAdhesion,
  });

  /// Libellé court pour le switcher (nomCourt ou nom tronqué).
  String get libelleCourt {
    if (nomCourt != null && nomCourt!.isNotEmpty) return nomCourt!;
    if (nom.length > 25) return '${nom.substring(0, 22)}…';
    return nom;
  }

  /// Modules actifs parsés en Set<String>.
  Set<String> get modulesActifsSet {
    if (modulesActifs == null || modulesActifs!.isEmpty) return {};
    return modulesActifs!.split(',').map((m) => m.trim()).toSet();
  }

  factory OrgSwitcherEntry.fromJson(Map<String, dynamic> json) {
    return OrgSwitcherEntry(
      organisationId: json['organisationId']?.toString() ?? '',
      nom: json['nom']?.toString() ?? '',
      nomCourt: json['nomCourt']?.toString(),
      typeOrganisation: json['typeOrganisation']?.toString() ?? '',
      categorieType: json['categorieType']?.toString(),
      modulesActifs: json['modulesActifs']?.toString(),
      statut: json['statut']?.toString(),
      statutMembre: json['statutMembre']?.toString(),
      roleOrg: json['roleOrg']?.toString(),
      dateAdhesion: json['dateAdhesion']?.toString(),
    );
  }

  @override
  List<Object?> get props => [
        organisationId,
        nom,
        nomCourt,
        typeOrganisation,
        categorieType,
        modulesActifs,
        statut,
        statutMembre,
        roleOrg,
        dateAdhesion,
      ];
}
