// ── USER ────────────────────────────────────────────────────────────────── class UserModel { final int? id; final String nombre; final String email; final String password; final String rol; // CIUDADANO | CONDUCTOR | ADMINISTRADOR UserModel({this.id, required this.nombre, required this.email, required this.password, required this.rol}); Map toMap() => {'id': id, 'nombre': nombre, 'email': email, 'password': password, 'rol': rol}; factory UserModel.fromMap(Map m) => UserModel( id: m['id'], nombre: m['nombre'], email: m['email'], password: m['password'], rol: m['rol']); } // ── DOMICILIO (citizen) ─────────────────────────────────────────────────── class DomicilioModel { final int? id; final int userId; final String calle; final String colonia; final String routeId; final String horarioEstimado; final bool isPrimary; DomicilioModel({this.id, required this.userId, required this.calle, required this.colonia, required this.routeId, required this.horarioEstimado, this.isPrimary = true}); Map toMap() => {'id': id, 'user_id': userId, 'calle': calle, 'colonia': colonia, 'route_id': routeId, 'horario_estimado': horarioEstimado, 'is_primary': isPrimary ? 1 : 0}; factory DomicilioModel.fromMap(Map m) => DomicilioModel( id: m['id'], userId: m['user_id'], calle: m['calle'], colonia: m['colonia'], routeId: m['route_id'], horarioEstimado: m['horario_estimado'], isPrimary: m['is_primary'] == 1); } // ── ASSIGNMENT (driver schedule) ────────────────────────────────────────── class AssignmentModel { final int? id; final int conductorId; final String routeId; final String diaSemana; final String turno; // MATUTINO | VESPERTINO | NOCTURNO AssignmentModel({this.id, required this.conductorId, required this.routeId, required this.diaSemana, required this.turno}); Map toMap() => {'id': id, 'conductor_id': conductorId, 'route_id': routeId, 'dia_semana': diaSemana, 'turno': turno}; factory AssignmentModel.fromMap(Map m) => AssignmentModel( id: m['id'], conductorId: m['conductor_id'], routeId: m['route_id'], diaSemana: m['dia_semana'], turno: m['turno']); } // ── ROUTE STATUS ────────────────────────────────────────────────────────── class RouteStatusModel { final String routeId; final String status; final String? mensaje; final String updatedAt; RouteStatusModel({required this.routeId, required this.status, this.mensaje, required this.updatedAt}); Map toMap() => {'route_id': routeId, 'status': status, 'mensaje': mensaje, 'updated_at': updatedAt}; factory RouteStatusModel.fromMap(Map m) => RouteStatusModel( routeId: m['route_id'], status: m['status'], mensaje: m['mensaje'], updatedAt: m['updated_at']); } // ── ALERTA ──────────────────────────────────────────────────────────────── class AlertaModel { final int? id; final String tipo; // GPS_PERDIDO | CAMION_DETENIDO | FALLA_MECANICA final String routeId; final String mensaje; final String fecha; final bool resuelta; AlertaModel({this.id, required this.tipo, required this.routeId, required this.mensaje, required this.fecha, this.resuelta = false}); Map toMap() => {'id': id, 'tipo': tipo, 'route_id': routeId, 'mensaje': mensaje, 'fecha': fecha, 'resuelta': resuelta ? 1 : 0}; factory AlertaModel.fromMap(Map m) => AlertaModel( id: m['id'], tipo: m['tipo'], routeId: m['route_id'], mensaje: m['mensaje'], fecha: m['fecha'], resuelta: m['resuelta'] == 1); } // ── REPORTE ─────────────────────────────────────────────────────────────── class ReporteModel { final int? id; final int userId; final String tipo; final String descripcion; final String colonia; final String routeId; final String fecha; final String estado; final int calificacion; ReporteModel({this.id, required this.userId, required this.tipo, required this.descripcion, required this.colonia, required this.routeId, required this.fecha, this.estado = 'PENDIENTE', this.calificacion = 5}); Map toMap() => {'id': id, 'user_id': userId, 'tipo': tipo, 'descripcion': descripcion, 'colonia': colonia, 'route_id': routeId, 'fecha': fecha, 'estado': estado, 'calificacion': calificacion}; factory ReporteModel.fromMap(Map m) => ReporteModel( id: m['id'], userId: m['user_id'], tipo: m['tipo'], descripcion: m['descripcion'], colonia: m['colonia'], routeId: m['route_id'] ?? '', fecha: m['fecha'], estado: m['estado'], calificacion: m['calificacion'] ?? 5); }