/// Модель "дома" -- один физический сервер Ignis. /// Каждый дом имеет свой URL и API-ключ. class HomeConfig { final String id; // уникальный идентификатор (uuid или timestamp) final String name; // человекочитаемое название ("Квартира", "Дача") final String url; // адрес сервера (например ignis.akokos.ru) final String apiKey; // ключ авторизации final double? latitude; // GPS-широта дома (для гео-автоматизации) final double? longitude; // GPS-долгота дома (для гео-автоматизации) HomeConfig({ required this.id, required this.name, required this.url, required this.apiKey, this.latitude, this.longitude, }); /// Есть ли координаты у дома bool get hasCoordinates => latitude != null && longitude != null; /// Сериализация в JSON для хранения в SharedPreferences Map toJson() => { 'id': id, 'name': name, 'url': url, 'apiKey': apiKey, if (latitude != null) 'latitude': latitude, if (longitude != null) 'longitude': longitude, }; factory HomeConfig.fromJson(Map json) => HomeConfig( id: json['id'] as String, name: json['name'] as String, url: json['url'] as String, apiKey: json['apiKey'] as String, latitude: (json['latitude'] as num?)?.toDouble(), longitude: (json['longitude'] as num?)?.toDouble(), ); /// Копирование с изменениями HomeConfig copyWith({ String? name, String? url, String? apiKey, double? latitude, double? longitude, bool clearCoordinates = false, }) => HomeConfig( id: id, name: name ?? this.name, url: url ?? this.url, apiKey: apiKey ?? this.apiKey, latitude: clearCoordinates ? null : (latitude ?? this.latitude), longitude: clearCoordinates ? null : (longitude ?? this.longitude), ); }