import '../../models/document_model.dart'; enum PendingDocumentStatus { uploading, processing, success, error, syncFailed } class PendingDocument { final String id; final String imagePath; final PendingDocumentStatus status; final DocumentModel? document; final double? latitude; final double? longitude; final String? errorMessage; final DateTime createdAt; final String? scanMode; PendingDocument({ required this.id, required this.imagePath, this.status = PendingDocumentStatus.uploading, this.document, this.latitude, this.longitude, this.errorMessage, DateTime? createdAt, this.scanMode, }) : createdAt = createdAt ?? DateTime.now(); PendingDocument copyWith({ PendingDocumentStatus? status, DocumentModel? document, double? latitude, double? longitude, String? errorMessage, String? scanMode, }) { return PendingDocument( id: id, imagePath: imagePath, status: status ?? this.status, document: document ?? this.document, latitude: latitude ?? this.latitude, longitude: longitude ?? this.longitude, errorMessage: errorMessage, createdAt: createdAt, scanMode: scanMode ?? this.scanMode, ); } Map toJson() { return { 'id': id, 'image_path': imagePath, 'status': status.name, 'document': document?.toJson(), 'latitude': latitude, 'longitude': longitude, 'error_message': errorMessage, 'created_at': createdAt.toIso8601String(), 'scan_mode': scanMode, }; } factory PendingDocument.fromJson(Map json) { PendingDocumentStatus status; try { status = PendingDocumentStatus.values.byName(json['status'] as String? ?? ''); } catch (_) { status = PendingDocumentStatus.error; } final rawDocument = json['document']; return PendingDocument( id: json['id'] as String, imagePath: json['image_path'] as String, status: status, document: rawDocument is Map ? DocumentModel.fromJson(Map.from(rawDocument)) : null, latitude: (json['latitude'] as num?)?.toDouble(), longitude: (json['longitude'] as num?)?.toDouble(), errorMessage: json['error_message'] as String?, createdAt: json['created_at'] != null ? DateTime.parse(json['created_at'] as String) : null, scanMode: json['scan_mode'] as String?, ); } }