class Employee { const Employee({ required this.id, required this.name, required this.phoneNumber, this.phoneDisplay, this.email, required this.tenantId, required this.tenantName, required this.tenantSlug, this.department, this.grade, this.position, this.jobTitle, this.status, this.profileImageUrl, this.sortOrder, this.isManager = false, }); final String id; final String name; final String phoneNumber; final String? phoneDisplay; final String? email; final String tenantId; final String tenantName; final String tenantSlug; final String? department; final String? grade; final String? position; final String? jobTitle; final String? status; final String? profileImageUrl; final int? sortOrder; final bool isManager; factory Employee.fromJson(Map json) { return Employee( id: json['id'] as String? ?? '', name: json['name'] as String? ?? '', phoneNumber: json['phoneNumber'] as String? ?? '', phoneDisplay: json['phoneDisplay'] as String?, email: json['email'] as String?, tenantId: json['tenantId'] as String? ?? '', tenantName: json['tenantName'] as String? ?? '', tenantSlug: json['tenantSlug'] as String? ?? '', department: json['department'] as String?, grade: json['grade'] as String?, position: json['position'] as String?, jobTitle: json['jobTitle'] as String?, status: json['status'] as String?, profileImageUrl: json['profileImageUrl'] as String?, sortOrder: json['sortOrder'] as int?, isManager: json['isManager'] as bool? ?? false, ); } Map toJson() { return { 'id': id, 'name': name, 'phoneNumber': phoneNumber, 'phoneDisplay': phoneDisplay, 'email': email, 'tenantId': tenantId, 'tenantName': tenantName, 'tenantSlug': tenantSlug, 'department': department, 'grade': grade, 'position': position, 'jobTitle': jobTitle, 'status': status, 'profileImageUrl': profileImageUrl, 'sortOrder': sortOrder, 'isManager': isManager, }; } } class TenantRef { const TenantRef({ required this.id, required this.name, required this.slug, required this.type, this.parentId, }); final String id; final String name; final String slug; final String type; final String? parentId; factory TenantRef.fromJson(Map json) { return TenantRef( id: json['id'] as String? ?? '', name: json['name'] as String? ?? '', slug: json['slug'] as String? ?? '', type: json['type'] as String? ?? '', parentId: json['parentId'] as String?, ); } Map toJson() { return { 'id': id, 'name': name, 'slug': slug, 'type': type, 'parentId': parentId, }; } } class EmployeeActions { const EmployeeActions({ required this.call, required this.sms, required this.email, }); final bool call; final bool sms; final bool email; factory EmployeeActions.fromJson(Map json) { return EmployeeActions( call: json['call'] as bool? ?? false, sms: json['sms'] as bool? ?? false, email: json['email'] as bool? ?? false, ); } Map toJson() { return {'call': call, 'sms': sms, 'email': email}; } } class EmployeeDetail extends Employee { const EmployeeDetail({ required super.id, required super.name, required super.phoneNumber, super.phoneDisplay, super.email, required super.tenantId, required super.tenantName, required super.tenantSlug, super.department, super.grade, super.position, super.jobTitle, super.status, super.profileImageUrl, super.sortOrder, super.isManager, required this.joinedTenants, required this.actions, }); final List joinedTenants; final EmployeeActions actions; factory EmployeeDetail.fromJson(Map json) { return EmployeeDetail( id: json['id'] as String? ?? '', name: json['name'] as String? ?? '', phoneNumber: json['phoneNumber'] as String? ?? '', phoneDisplay: json['phoneDisplay'] as String?, email: json['email'] as String?, tenantId: json['tenantId'] as String? ?? '', tenantName: json['tenantName'] as String? ?? '', tenantSlug: json['tenantSlug'] as String? ?? '', department: json['department'] as String?, grade: json['grade'] as String?, position: json['position'] as String?, jobTitle: json['jobTitle'] as String?, status: json['status'] as String?, profileImageUrl: json['profileImageUrl'] as String?, sortOrder: json['sortOrder'] as int?, isManager: json['isManager'] as bool? ?? false, joinedTenants: (json['joinedTenants'] as List? ?? []) .map((item) => TenantRef.fromJson(item as Map)) .toList(), actions: EmployeeActions.fromJson( json['actions'] as Map? ?? {}, ), ); } @override Map toJson() { return { ...super.toJson(), 'joinedTenants': joinedTenants.map((tenant) => tenant.toJson()).toList(), 'actions': actions.toJson(), }; } } class EmployeeListResponse { const EmployeeListResponse({ required this.items, required this.limit, required this.offset, required this.total, required this.nextCursor, }); final List items; final int limit; final int offset; final int total; final String nextCursor; factory EmployeeListResponse.fromJson(Map json) { return EmployeeListResponse( items: (json['items'] as List? ?? []) .map((item) => Employee.fromJson(item as Map)) .toList(), limit: json['limit'] as int? ?? 0, offset: json['offset'] as int? ?? 0, total: json['total'] as int? ?? 0, nextCursor: json['nextCursor'] as String? ?? '', ); } Map toJson() { return { 'items': items.map((employee) => employee.toJson()).toList(), 'limit': limit, 'offset': offset, 'total': total, 'nextCursor': nextCursor, }; } }