import 'dart:typed_data'; import 'package:equatable/equatable.dart'; class ServiceFileModel extends Equatable { final String? id; final DateTime? createdAt; final String name; final String extension; final String storagePath; final String serviceId; final int fileSize; final Uint8List? localBytes; const ServiceFileModel({ this.id, this.createdAt, required this.name, required this.extension, required this.storagePath, required this.serviceId, required this.fileSize, this.localBytes, }); // Trasforma i byte in qualcosa di leggibile (KB, MB, GB) String get sizeFormatted { if (fileSize <= 0) return "0 B"; const suffixes = ["B", "KB", "MB", "GB", "TB"]; var i = (fileSize.toString().length - 1) ~/ 3; if (i >= suffixes.length) i = suffixes.length - 1; double num = fileSize / (1 << (i * 10)); return "${num.toStringAsFixed(i == 0 ? 0 : 1)} ${suffixes[i]}"; } bool get isPdf => extension.toLowerCase().replaceAll('.', '') == 'pdf'; ServiceFileModel copyWith({ String? id, DateTime? createdAt, String? name, String? extension, String? storagePath, String? serviceId, int? fileSize, Uint8List? localBytes, }) { return ServiceFileModel( id: id ?? this.id, createdAt: createdAt ?? this.createdAt, name: name ?? this.name, extension: extension ?? this.extension, storagePath: storagePath ?? this.storagePath, serviceId: serviceId ?? this.serviceId, fileSize: fileSize ?? this.fileSize, localBytes: localBytes ?? this.localBytes, ); } factory ServiceFileModel.fromMap(Map map) { return ServiceFileModel( id: map['id'] as String, createdAt: map['created_at'] != null ? DateTime.parse(map['created_at']) : null, name: map['name'] ?? '', extension: map['extension'] ?? '', storagePath: map['storage_path'] ?? '', serviceId: map['service_id']?.toString() ?? '', fileSize: map['file_size'] is int ? map['file_size'] : int.tryParse(map['file_size']?.toString() ?? '0') ?? 0, ); } Map toMap() { return { if (id != null) 'id': id, 'name': name, 'extension': extension, 'storage_path': storagePath, 'service_id': serviceId, 'file_size': fileSize, }; } @override List get props => [ id, createdAt, name, extension, storagePath, serviceId, fileSize, localBytes, ]; }