Files
SIB/old/lib/models/route_model.dart

155 lines
4.3 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class RouteModel {
final String id;
final String name;
final String? description;
final String color;
final String direction;
final String? originCity;
final String? destinationCity;
final double? distanceKm;
final int? estimatedDurationMinutes;
final String status;
final DateTime? createdAt;
final DateTime? updatedAt;
RouteModel({
required this.id,
required this.name,
this.description,
required this.color,
required this.direction,
this.originCity,
this.destinationCity,
this.distanceKm,
this.estimatedDurationMinutes,
this.status = 'active',
this.createdAt,
this.updatedAt,
});
factory RouteModel.fromJson(Map<String, dynamic> json) {
return RouteModel(
id: json['id']?.toString() ?? '',
name: json['name']?.toString() ?? '',
description: json['description']?.toString(),
color: json['color']?.toString() ?? '#FEE715',
direction: json['direction']?.toString() ?? 'outbound',
originCity: json['origin_city']?.toString(),
destinationCity: json['destination_city']?.toString(),
distanceKm: json['distance_km'] != null
? double.tryParse(json['distance_km'].toString())
: null,
estimatedDurationMinutes: json['estimated_duration_minutes'] != null
? int.tryParse(json['estimated_duration_minutes'].toString())
: null,
status: json['status']?.toString() ?? 'active',
createdAt: json['created_at'] != null
? DateTime.tryParse(json['created_at'].toString())
: null,
updatedAt: json['updated_at'] != null
? DateTime.tryParse(json['updated_at'].toString())
: null,
);
}
Map<String, dynamic> toJson() {
return {
'id': id,
'name': name,
'description': description,
'color': color,
'direction': direction,
'origin_city': originCity,
'destination_city': destinationCity,
'distance_km': distanceKm,
'estimated_duration_minutes': estimatedDurationMinutes,
'status': status,
'created_at': createdAt?.toIso8601String(),
'updated_at': updatedAt?.toIso8601String(),
};
}
// Helper getters
String get displayName {
if (name.isNotEmpty) return name;
final od = [originCity, destinationCity]
.where((e) => e != null && e.trim().isNotEmpty)
.map((e) => e!.trim())
.join(' ');
return od.isNotEmpty ? od : 'Route';
}
String get routeDescription {
if (description != null && description!.isNotEmpty) {
return description!;
}
return 'Ruta $displayName';
}
String get durationText {
if (estimatedDurationMinutes != null) {
if (estimatedDurationMinutes! >= 60) {
final hours = estimatedDurationMinutes! ~/ 60;
final minutes = estimatedDurationMinutes! % 60;
return minutes > 0 ? '${hours}h ${minutes}min' : '${hours}h';
}
return '${estimatedDurationMinutes}min';
}
return 'N/A';
}
String get distanceText {
if (distanceKm != null) {
return '${distanceKm!.toStringAsFixed(1)} km';
}
return 'N/A';
}
bool get isActive => status == 'active';
RouteModel copyWith({
String? id,
String? name,
String? description,
String? color,
String? direction,
String? originCity,
String? destinationCity,
double? distanceKm,
int? estimatedDurationMinutes,
String? status,
DateTime? createdAt,
DateTime? updatedAt,
}) {
return RouteModel(
id: id ?? this.id,
name: name ?? this.name,
description: description ?? this.description,
color: color ?? this.color,
direction: direction ?? this.direction,
originCity: originCity ?? this.originCity,
destinationCity: destinationCity ?? this.destinationCity,
distanceKm: distanceKm ?? this.distanceKm,
estimatedDurationMinutes:
estimatedDurationMinutes ?? this.estimatedDurationMinutes,
status: status ?? this.status,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
);
}
@override
String toString() {
return 'RouteModel(id: $id, name: $name, direction: $direction, status: $status)';
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is RouteModel && other.id == id;
}
@override
int get hashCode => id.hashCode;
}