import 'package:hive/hive.dart';

part 'user_sector_model.g.dart';

/// Modèle pour stocker les associations entre utilisateurs et secteurs
///
/// Cette classe représente l'association entre un utilisateur et un secteur,
/// telle que reçue de l'API dans la réponse users_sectors.
@HiveType(
    typeId: 7) // Assurez-vous que cet ID est unique parmi vos modèles Hive
class UserSectorModel extends HiveObject {
  @HiveField(0)
  final int id; // ID de l'utilisateur

  @HiveField(1)
  final String? firstName;

  @HiveField(2)
  final String? sectName;

  @HiveField(3)
  final int fkSector; // ID du secteur

  @HiveField(4)
  final String? name;

  UserSectorModel({
    required this.id,
    this.firstName,
    this.sectName,
    required this.fkSector,
    this.name,
  });

  /// Crée un modèle UserSectorModel à partir d'un objet JSON
  factory UserSectorModel.fromJson(Map<String, dynamic> json) {
    return UserSectorModel(
      id: json['id'] is String ? int.parse(json['id']) : json['id'],
      firstName: json['first_name'],
      sectName: json['sect_name'],
      fkSector: json['fk_sector'] is String
          ? int.parse(json['fk_sector'])
          : json['fk_sector'],
      name: json['name'],
    );
  }

  /// Convertit le modèle en objet JSON
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'first_name': firstName,
      'sect_name': sectName,
      'fk_sector': fkSector,
      'name': name,
    };
  }

  /// Crée une copie du modèle avec des valeurs potentiellement modifiées
  UserSectorModel copyWith({
    int? id,
    String? firstName,
    String? sectName,
    int? fkSector,
    String? name,
  }) {
    return UserSectorModel(
      id: id ?? this.id,
      firstName: firstName ?? this.firstName,
      sectName: sectName ?? this.sectName,
      fkSector: fkSector ?? this.fkSector,
      name: name ?? this.name,
    );
  }

  @override
  String toString() {
    return 'UserSectorModel(id: $id, firstName: $firstName, sectName: $sectName, fkSector: $fkSector, name: $name)';
  }
}
