import 'package:real_estate_mobile/features/agents/data/models/agent_type.dart'; class AgentProfile { final String id; final String firstName; final String lastName; final String slug; final String? email; final String? phone; final String? bio; final String? avatar; final String? licenseNumber; final int? experience; final List specializations; final List languages; final List serviceAreas; final String? city; final String? state; final String? country; final double? rating; final int reviewCount; final bool isVerified; final bool isFeatured; final bool isAvailable; final String? agentTypeId; final AgentType? agentType; final List fieldValues; const AgentProfile({ required this.id, required this.firstName, required this.lastName, required this.slug, this.email, this.phone, this.bio, this.avatar, this.licenseNumber, this.experience, this.specializations = const [], this.languages = const [], this.serviceAreas = const [], this.city, this.state, this.country, this.rating, this.reviewCount = 0, this.isVerified = false, this.isFeatured = false, this.isAvailable = false, this.agentTypeId, this.agentType, this.fieldValues = const [], }); String get fullName => '$firstName $lastName'.trim(); String get location { if (city != null && state != null) return '$city, $state'; if (city != null) return city!; if (state != null) return state!; if (serviceAreas.isNotEmpty) return serviceAreas.first; return ''; } String get experienceText { if (experience == null) return ''; return '$experience+ years in the real estate industry.'; } factory AgentProfile.fromJson(Map json) { return AgentProfile( id: json['id'] as String, firstName: json['firstName'] as String? ?? '', lastName: json['lastName'] as String? ?? '', slug: json['slug'] as String? ?? '', email: json['email'] as String?, phone: json['phone'] as String?, bio: json['bio'] as String?, avatar: json['avatar'] as String?, licenseNumber: json['licenseNumber'] as String?, experience: json['experience'] as int?, specializations: _parseStringList(json['specializations']), languages: _parseStringList(json['languages']), serviceAreas: _parseStringList(json['serviceAreas']), city: json['city'] as String?, state: json['state'] as String?, country: json['country'] as String?, rating: (json['rating'] as num?)?.toDouble(), reviewCount: json['reviewCount'] as int? ?? 0, isVerified: json['isVerified'] as bool? ?? false, isFeatured: json['isFeatured'] as bool? ?? false, isAvailable: json['isAvailable'] as bool? ?? false, agentTypeId: json['agentTypeId'] as String?, agentType: json['agentType'] != null ? AgentType.fromJson(json['agentType'] as Map) : null, fieldValues: (json['fieldValues'] as List?) ?.map((e) => AgentFieldValue.fromJson(e as Map)) .toList() ?? const [], ); } static List _parseStringList(dynamic value) { if (value == null) return const []; if (value is List) return value.map((e) => e.toString()).toList(); return const []; } } class AgentFieldValue { final String id; final String fieldId; final String? textValue; final num? numberValue; final bool? booleanValue; final dynamic jsonValue; final String? dateValue; final AgentField field; const AgentFieldValue({ required this.id, required this.fieldId, this.textValue, this.numberValue, this.booleanValue, this.jsonValue, this.dateValue, required this.field, }); factory AgentFieldValue.fromJson(Map json) { return AgentFieldValue( id: json['id'] as String, fieldId: json['fieldId'] as String, textValue: json['textValue'] as String?, numberValue: json['numberValue'] as num?, booleanValue: json['booleanValue'] as bool?, jsonValue: json['jsonValue'], dateValue: json['dateValue'] as String?, field: AgentField.fromJson(json['field'] as Map), ); } } class AgentField { final String slug; final String name; final String fieldType; const AgentField({ required this.slug, required this.name, required this.fieldType, }); factory AgentField.fromJson(Map json) { return AgentField( slug: json['slug'] as String, name: json['name'] as String, fieldType: json['fieldType'] as String, ); } }