import 'package:equatable/equatable.dart';

class UserModel extends Equatable {
  // English: Unique identifier for the user.
  // Arabic: المعرف الفريد للمستخدم.
  final int id;

  // English: The ID of the company this user belongs to.
  // Arabic: معرف الشركة التي ينتمي إليها هذا المستخدم.
  final int companyId;

  // English: The name of the user.
  // Arabic: اسم المستخدم.
  final String name;

  // English: The email address of the user.
  // Arabic: البريد الإلكتروني للمستخدم.
  final String email;

  // English: The system role assigned to the user (e.g. admin, staff).
  // Arabic: دور النظام المعين للمستخدم (مثل مشرف، موظف).
  final String role;

  // English: Indicator if the user is a super admin (company ID 1).
  // Arabic: مؤشر ما إذا كان المستخدم مشرفاً عاماً (معرف الشركة 1).
  final bool isSuperAdmin;

  const UserModel({
    required this.id,
    required this.companyId,
    required this.name,
    required this.email,
    required this.role,
    required this.isSuperAdmin,
  });

  // English: Factory constructor to create a UserModel instance from JSON mapping.
  // Arabic: منشئ المصنع لإنشاء نسخة نموذج المستخدم من خريطة جيسون.
  factory UserModel.fromJson(Map<String, dynamic> json) {
    // English: Safely parse isSuperAdmin from dynamic input (boolean or integer).
    // Arabic: تحليل آمن لمؤشر المشرف العام من المدخلات الديناميكية (بولين أو عدد صحيح).
    final rawSuperAdmin = json['is_super_admin'];
    bool isSuper = false;
    if (rawSuperAdmin is bool) {
      isSuper = rawSuperAdmin;
    } else if (rawSuperAdmin is int) {
      isSuper = rawSuperAdmin == 1;
    } else if (rawSuperAdmin is String) {
      isSuper = rawSuperAdmin == '1' || rawSuperAdmin.toLowerCase() == 'true';
    }

    return UserModel(
      id: json['id'] as int? ?? 0,
      companyId: json['company_id'] as int? ?? 0,
      name: json['name'] as String? ?? '',
      email: json['email'] as String? ?? '',
      role: json['role'] as String? ?? '',
      isSuperAdmin: isSuper,
    );
  }

  // English: Convert UserModel instance to JSON map for local caching.
  // Arabic: تحويل نسخة نموذج المستخدم إلى خريطة جيسون للتخزين المؤقت المحلي.
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'company_id': companyId,
      'name': name,
      'email': email,
      'role': role,
      'is_super_admin': isSuperAdmin,
    };
  }

  @override
  List<Object?> get props => [id, companyId, name, email, role, isSuperAdmin];
}
