class Dealer { Dealer({ required this.id, required this.name, required this.code, this.district, this.address, this.phone, }); final String id; final String name; final String code; final String? district; final String? address; final String? phone; factory Dealer.fromJson(Map json) { return Dealer( id: json['id'] as String, name: json['name'] as String, code: json['code'] as String, district: json['district'] as String?, address: json['address'] as String?, phone: json['phone'] as String?, ); } } class AppUser { AppUser({ required this.id, required this.name, required this.phone, required this.role, this.dealerId, this.assignedDealerIds = const [], this.dealers = const [], }); final String id; final String name; final String phone; final String role; final String? dealerId; final List assignedDealerIds; final List dealers; factory AppUser.fromJson(Map json) { return AppUser( id: json['id'] as String, name: json['name'] as String, phone: json['phone'] as String, role: json['role'] as String, dealerId: json['dealerId'] as String?, assignedDealerIds: ((json['assignedDealerIds'] as List?) ?? const []) .map((id) => id as String) .toList(), dealers: ((json['dealers'] as List?) ?? const []) .map((item) => Dealer.fromJson(item as Map)) .toList(), ); } } class LoginRequestItem { LoginRequestItem({ required this.id, required this.name, required this.phone, this.dealerName, required this.createdAt, }); final String id; final String name; final String phone; final String? dealerName; final DateTime createdAt; factory LoginRequestItem.fromJson(Map json) { final user = json['user'] as Map; return LoginRequestItem( id: json['id'] as String, name: user['name'] as String, phone: user['phone'] as String, dealerName: json['dealerName'] as String?, createdAt: DateTime.parse(json['createdAt'] as String), ); } } class DealerLoginStatus { DealerLoginStatus({required this.status, this.token, this.user}); final String status; final String? token; final AppUser? user; factory DealerLoginStatus.fromJson(Map json) { return DealerLoginStatus( status: json['status'] as String, token: json['token'] as String?, user: json['user'] is Map ? AppUser.fromJson(json['user'] as Map) : null, ); } } class StockItem { StockItem({ required this.id, required this.chassisNumber, required this.engineNumber, required this.model, required this.color, required this.currentDealerId, this.dealerName, required this.dateReceived, required this.currentStage, required this.stageLogDates, this.paymentType, this.leaseProviderType, this.financeCompanyName, this.plateNumber, required this.ageInDays, required this.badge, }); final String id; final String chassisNumber; final String engineNumber; final String model; final String color; final String currentDealerId; final String? dealerName; final DateTime dateReceived; final String currentStage; final Map stageLogDates; final String? paymentType; final String? leaseProviderType; final String? financeCompanyName; final String? plateNumber; final int ageInDays; final String badge; factory StockItem.fromJson(Map json) { final rawLogs = json['stageLogDates']; final logs = {}; if (rawLogs is Map) { rawLogs.forEach((key, value) { if (value != null) { logs[key.toString()] = DateTime.parse(value.toString()); } }); } return StockItem( id: json['id'] as String, chassisNumber: json['chassisNumber'] as String, engineNumber: json['engineNumber'] as String, model: json['model'] as String, color: json['color'] as String, currentDealerId: json['currentDealerId'] as String, dealerName: json['dealerName'] as String?, dateReceived: DateTime.parse(json['dateReceived'] as String), currentStage: json['currentStage'] as String, stageLogDates: logs, paymentType: json['paymentType'] as String?, leaseProviderType: json['leaseProviderType'] as String?, financeCompanyName: json['financeCompanyName'] as String?, plateNumber: json['plateNumber'] as String?, ageInDays: (json['ageInDays'] as num).toInt(), badge: json['badge'] as String, ); } } class EventPlan { EventPlan({ required this.id, required this.dealerId, this.dealerName, required this.planType, this.month, this.year, required this.title, required this.description, required this.expense, required this.imageUrls, required this.createdAt, }); final String id; final String dealerId; final String? dealerName; final String planType; final int? month; final int? year; final String title; final String description; final double expense; final List imageUrls; final DateTime createdAt; factory EventPlan.fromJson(Map json) { return EventPlan( id: json['id'] as String, dealerId: json['dealerId'] as String, dealerName: json['dealerName'] as String?, planType: json['planType'] as String, month: json['month'] as int?, year: json['year'] as int?, title: json['title'] as String, description: json['description'] as String, expense: (json['expense'] as num).toDouble(), imageUrls: ((json['imageUrls'] as List?) ?? const []) .map((url) => url as String) .toList(), createdAt: DateTime.parse(json['createdAt'] as String), ); } } class ServicePoint { ServicePoint({ required this.id, required this.name, required this.district, this.address, this.phone, this.notes, }); final String id; final String name; final String district; final String? address; final String? phone; final String? notes; factory ServicePoint.fromJson(Map json) { return ServicePoint( id: json['id'] as String, name: json['name'] as String, district: json['district'] as String, address: json['address'] as String?, phone: json['phone'] as String?, notes: json['notes'] as String?, ); } }