class Allarme { final int id; final int sitoId; final String tipo; final String severita; final String stato; final String titolo; final String? descrizione; final double? valoreRilevato; final double? valoreSoglia; final String? unitaMisura; final Map? datiSensori; final DateTime timestampRilevamento; final DateTime createdAt; Allarme({ required this.id, required this.sitoId, required this.tipo, required this.severita, required this.stato, required this.titolo, this.descrizione, this.valoreRilevato, this.valoreSoglia, this.unitaMisura, this.datiSensori, required this.timestampRilevamento, required this.createdAt, }); factory Allarme.fromJson(Map json) { return Allarme( id: json['id'] as int, sitoId: json['sito_id'] as int, tipo: json['tipo'] as String, severita: json['severita'] as String, stato: json['stato'] as String, titolo: json['titolo'] as String, descrizione: json['descrizione'] as String?, valoreRilevato: json['valore_rilevato'] != null ? (json['valore_rilevato'] as num).toDouble() : null, valoreSoglia: json['valore_soglia'] != null ? (json['valore_soglia'] as num).toDouble() : null, unitaMisura: json['unita_misura'] as String?, datiSensori: json['dati_sensori'] as Map?, timestampRilevamento: DateTime.parse(json['timestamp_rilevamento'] as String), createdAt: DateTime.parse(json['created_at'] as String), ); } bool get isCritical => severita == 'critical'; bool get isWarning => severita == 'warning'; bool get isRisolto => stato == 'risolto'; String get tipoReadable { final labels = { 'movimento_terreno': 'Movimento Terreno', 'deformazione': 'Deformazione', 'altro': 'Altro', }; return labels[tipo] ?? tipo; } String get statoReadable { final labels = { 'nuovo': 'Nuovo', 'in_gestione': 'In Gestione', 'risolto': 'Risolto', }; return labels[stato] ?? stato; } String get severitaReadable { final labels = { 'critical': 'CRITICO', 'warning': 'AVVISO', 'info': 'INFO', }; return labels[severita] ?? severita.toUpperCase(); } } class AllarmeListResponse { final int total; final List items; final int page; final int pageSize; AllarmeListResponse({ required this.total, required this.items, required this.page, required this.pageSize, }); factory AllarmeListResponse.fromJson(Map json) { return AllarmeListResponse( total: json['total'] as int, items: (json['items'] as List) .map((item) => Allarme.fromJson(item as Map)) .toList(), page: json['page'] as int, pageSize: json['page_size'] as int, ); } bool get hasMore => items.length < total; }