import 'package:freezed_annotation/freezed_annotation.dart'; part 'environment_model.freezed.dart'; part 'environment_model.g.dart'; /// Environment data response from Core API. /// Contains weather, forecast, sun times, and optionally air quality. @freezed sealed class EnvironmentData with _$EnvironmentData { const factory EnvironmentData({ WeatherData? weather, List? forecast, @JsonKey(name: 'sun_times') SunTimesData? sunTimes, @JsonKey(name: 'air_quality') AirQualityData? airQuality, @JsonKey(name: 'updated_at') required DateTime updatedAt, String? user, }) = _EnvironmentData; factory EnvironmentData.fromJson(Map json) => _$EnvironmentDataFromJson(json); } /// Current weather conditions. @freezed sealed class WeatherData with _$WeatherData { const factory WeatherData({ double? temperature, @JsonKey(name: 'feels_like') double? feelsLike, String? conditions, int? humidity, @JsonKey(name: 'wind_speed') double? windSpeed, @JsonKey(name: 'wind_direction') String? windDirection, double? pressure, double? visibility, @JsonKey(name: 'uv_index') double? uvIndex, String? location, String? icon, }) = _WeatherData; factory WeatherData.fromJson(Map json) => _$WeatherDataFromJson(json); } /// Single day forecast data. @freezed sealed class ForecastDay with _$ForecastDay { const factory ForecastDay({ required String date, double? high, double? low, String? conditions, @JsonKey(name: 'precipitation_chance') int? precipitationChance, String? icon, }) = _ForecastDay; factory ForecastDay.fromJson(Map json) => _$ForecastDayFromJson(json); } /// Sunrise and sunset times. @freezed sealed class SunTimesData with _$SunTimesData { const factory SunTimesData({ DateTime? sunrise, DateTime? sunset, @JsonKey(name: 'daylight_minutes') int? daylightMinutes, @JsonKey(name: 'solar_noon') DateTime? solarNoon, DateTime? dawn, DateTime? dusk, }) = _SunTimesData; factory SunTimesData.fromJson(Map json) => _$SunTimesDataFromJson(json); } /// Air quality information. @freezed sealed class AirQualityData with _$AirQualityData { const factory AirQualityData({ int? aqi, String? quality, double? pm25, double? pm10, double? o3, double? no2, String? location, }) = _AirQualityData; factory AirQualityData.fromJson(Map json) => _$AirQualityDataFromJson(json); }