class Sito { final int id; final int clienteId; final String nome; final String tipo; final String? descrizione; final double? latitudine; final double? longitudine; final double? altitudine; final String? comune; final String? provincia; final String? regione; final String? codiceIdentificativo; final DateTime createdAt; final DateTime? updatedAt; Sito({ required this.id, required this.clienteId, required this.nome, required this.tipo, this.descrizione, this.latitudine, this.longitudine, this.altitudine, this.comune, this.provincia, this.regione, this.codiceIdentificativo, required this.createdAt, this.updatedAt, }); factory Sito.fromJson(Map json) { return Sito( id: json['id'] as int, clienteId: json['cliente_id'] as int, nome: json['nome'] as String, tipo: json['tipo'] as String, descrizione: json['descrizione'] as String?, latitudine: json['latitudine'] != null ? (json['latitudine'] as num).toDouble() : null, longitudine: json['longitudine'] != null ? (json['longitudine'] as num).toDouble() : null, altitudine: json['altitudine'] != null ? (json['altitudine'] as num).toDouble() : null, comune: json['comune'] as String?, provincia: json['provincia'] as String?, regione: json['regione'] as String?, codiceIdentificativo: json['codice_identificativo'] as String?, createdAt: DateTime.parse(json['created_at'] as String), updatedAt: json['updated_at'] != null ? DateTime.parse(json['updated_at'] as String) : null, ); } String get tipoReadable { final labels = { 'ponte': 'Ponte', 'galleria': 'Galleria', 'diga': 'Diga', 'frana': 'Frana', 'versante': 'Versante', 'edificio': 'Edificio', }; return labels[tipo] ?? tipo; } String get localita { final parts = []; if (comune != null) parts.add(comune!); if (provincia != null) parts.add('($provincia)'); return parts.isNotEmpty ? parts.join(' ') : 'N/D'; } bool get hasCoordinates => latitudine != null && longitudine != null; }