class Tenant {
  final String id;
  final String name;
  final String slug;
  final String description;

  Tenant({
    required this.id,
    required this.name,
    required this.slug,
    required this.description,
  });

  factory Tenant.fromJson(Map<String, dynamic> json) {
    return Tenant(
      id: json['id'] ?? '',
      name: json['name'] ?? '',
      slug: json['slug'] ?? '',
      description: json['description'] ?? '',
    );
  }

  Map<String, dynamic> toJson() {
    return {'id': id, 'name': name, 'slug': slug, 'description': description};
  }
}

class UserProfile {
  final String id;
  final String email;
  final String name;
  final String phone;
  final String department;
  final String affiliationType;
  final String companyCode;
  final String? sessionAuthenticatedAt;
  final Map<String, dynamic>? metadata;
  final Tenant? tenant;

  UserProfile({
    required this.id,
    required this.email,
    required this.name,
    required this.phone,
    required this.department,
    required this.affiliationType,
    required this.companyCode,
    this.sessionAuthenticatedAt,
    this.metadata,
    this.tenant,
  });

  factory UserProfile.fromJson(Map<String, dynamic> json) {
    return UserProfile(
      id: json['id'] ?? '',
      email: json['email'] ?? '',
      name: json['name'] ?? '',
      phone: json['phone'] ?? '',
      department: json['department'] ?? '',
      affiliationType: json['affiliationType'] ?? '',
      companyCode: json['companyCode'] ?? '',
      sessionAuthenticatedAt: json['sessionAuthenticatedAt'] as String?,
      metadata: json['metadata'] != null
          ? Map<String, dynamic>.from(json['metadata'])
          : null,
      tenant: json['tenant'] != null ? Tenant.fromJson(json['tenant']) : null,
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'email': email,
      'name': name,
      'phone': phone,
      'department': department,
      'affiliationType': affiliationType,
      'companyCode': companyCode,
      'sessionAuthenticatedAt': sessionAuthenticatedAt,
      'metadata': metadata,
      'tenant': tenant?.toJson(),
    };
  }

  UserProfile copyWith({String? name, String? phone, String? department}) {
    return UserProfile(
      id: id,
      email: email,
      name: name ?? this.name,
      phone: phone ?? this.phone,
      department: department ?? this.department,
      affiliationType: affiliationType,
      companyCode: companyCode,
      sessionAuthenticatedAt: sessionAuthenticatedAt,
      tenant: tenant,
    );
  }
}
