// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.maps.weather.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.OffsetDateTime;

/** The CurrentConditions model. */
@Fluent
public final class CurrentConditions {
    /*
     * Date and time of the current observation displayed in ISO 8601 format, for example, 2019-10-27T19:39:57-08:00.
     */
    @JsonProperty(value = "dateTime")
    private OffsetDateTime dateTime;

    /*
     * Phrase description of the current weather condition.  Displayed in specified language.
     */
    @JsonProperty(value = "phrase")
    private String description;

    /*
     * Numeric value representing an image that displays the `iconPhrase`. Please refer to [Weather Service
     * Concepts](https://aka.ms/AzureMapsWeatherConcepts) for details.
     */
    @JsonProperty(value = "iconCode")
    private IconCode iconCode;

    /*
     * Indicates the presence or absence of precipitation. True indicates the presence of precipitation, false
     * indicates the absence of precipitation.
     */
    @JsonProperty(value = "hasPrecipitation")
    private Boolean hasPrecipitation;

    /*
     * Indicates the time of the day. True indicates 'day',', false indicates 'night.
     */
    @JsonProperty(value = "isDayTime")
    private Boolean isDaytime;

    /*
     * Temperature being returned.
     */
    @JsonProperty(value = "temperature")
    private WeatherUnitDetails temperature;

    /*
     * RealFeel™ Temperature being returned.
     */
    @JsonProperty(value = "realFeelTemperature")
    private WeatherUnitDetails realFeelTemperature;

    /*
     * RealFeel™ Temperature being returned. Describes what the temperature really feels like in the shade.
     */
    @JsonProperty(value = "realFeelTemperatureShade")
    private WeatherUnitDetails realFeelTemperatureShade;

    /*
     * Relative humidity is the amount of water vapor present in air expressed as a percentage of the amount needed for
     * saturation at the same temperature.
     */
    @JsonProperty(value = "relativeHumidity")
    private Integer relativeHumidity;

    /*
     * The dewpoint temperature in specified unit. The dewpoint temperature is the temperature that the air must be
     * cooled to in order to reach saturation.
     */
    @JsonProperty(value = "dewPoint")
    private WeatherUnitDetails dewPoint;

    /*
     * Wind details being returned including speed and direction.
     */
    @JsonProperty(value = "wind")
    private WindDetails wind;

    /*
     * Wind gust. Wind gust is a sudden, brief increase in speed of the wind.
     */
    @JsonProperty(value = "windGust")
    private WindDetails windGust;

    /*
     * Measure of the strength of the ultraviolet radiation from the sun. Supported values are:
     * * `0-2` - Low danger from the sun's UV rays or the average person.
     * * `3-5` - Moderate risk of harm from unprotected sun exposure.
     * * `6-7` - High risk of harm from unprotected sun exposure.
     * * `8-10` - Very high risk of harm from unprotected sun exposure.
     * * `11+` - Extreme risk of harm from unprotected sun exposure.
     */
    @JsonProperty(value = "uvIndex")
    private Integer uvIndex;

    /*
     * Phrase associated with the `uvIndex`.
     */
    @JsonProperty(value = "uvIndexPhrase")
    private String uvIndexDescription;

    /*
     * Visibility in specified unit. A measure of the distance at which an object or light can be clearly discerned.
     */
    @JsonProperty(value = "visibility")
    private WeatherUnitDetails visibility;

    /*
     * Cause of limited visibility.
     */
    @JsonProperty(value = "obstructionsToVisibility")
    private String obstructionsToVisibility;

    /*
     * Percent representing cloud cover.
     */
    @JsonProperty(value = "cloudCover")
    private Integer cloudCover;

    /*
     * Cloud ceiling in specified unit. The ceiling is a measurement of the height of the base of the lowest clouds.
     */
    @JsonProperty(value = "ceiling")
    private WeatherUnitDetails cloudCeiling;

    /*
     * Atmospheric pressure in specified unit.
     */
    @JsonProperty(value = "pressure")
    private WeatherUnitDetails pressure;

    /*
     * Atmospheric pressure change.
     */
    @JsonProperty(value = "pressureTendency")
    private PressureTendency pressureTendency;

    /*
     * Departure from the temperature observed 24 hours ago in specified unit.
     */
    @JsonProperty(value = "pastTwentyFourHourTemperatureDeparture")
    private WeatherUnitDetails pastTwentyFourHourTemperatureDeparture;

    /*
     * Perceived outdoor temperature caused by the combination of air temperature, relative humidity, and wind speed in
     * specified unit.
     */
    @JsonProperty(value = "apparentTemperature")
    private WeatherUnitDetails apparentTemperature;

    /*
     * Perceived air temperature on exposed skin due to wind.
     */
    @JsonProperty(value = "windChillTemperature")
    private WeatherUnitDetails windChillTemperature;

    /*
     * The temperature to which air may be cooled by evaporating water into it at constant pressure until it reaches
     * saturation.
     */
    @JsonProperty(value = "wetBulbTemperature")
    private WeatherUnitDetails wetBulbTemperature;

    /*
     * Summary of precipitation amounts over the past 24 hours.
     */
    @JsonProperty(value = "precipitationSummary")
    private PrecipitationSummary precipitationSummary;

    /*
     * Summary of temperature fluctuations over the past 6, 12, and 24 hours.
     */
    @JsonProperty(value = "temperatureSummary")
    private TemperatureSummary temperatureSummary;

    /** Set default CurrentConditions constructor to private */
    private CurrentConditions() {}

    /**
     * Get the dateTime property: Date and time of the current observation displayed in ISO 8601 format, for example,
     * 2019-10-27T19:39:57-08:00.
     *
     * @return the dateTime value.
     */
    public OffsetDateTime getDateTime() {
        return this.dateTime;
    }

    /**
     * Get the description property: Phrase description of the current weather condition. Displayed in specified
     * language.
     *
     * @return the description value.
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Get the iconCode property: Numeric value representing an image that displays the `iconPhrase`. Please refer to
     * [Weather Service Concepts](https://aka.ms/AzureMapsWeatherConcepts) for details.
     *
     * @return the iconCode value.
     */
    public IconCode getIconCode() {
        return this.iconCode;
    }

    /**
     * Get the hasPrecipitation property: Indicates the presence or absence of precipitation. True indicates the
     * presence of precipitation, false indicates the absence of precipitation.
     *
     * @return the hasPrecipitation value.
     */
    public Boolean isHasPrecipitation() {
        return this.hasPrecipitation;
    }

    /**
     * Get the isDaytime property: Indicates the time of the day. True indicates 'day',', false indicates 'night.
     *
     * @return the isDaytime value.
     */
    public Boolean isDaytime() {
        return this.isDaytime;
    }

    /**
     * Get the temperature property: Temperature being returned.
     *
     * @return the temperature value.
     */
    public WeatherUnitDetails getTemperature() {
        return this.temperature;
    }

    /**
     * Get the realFeelTemperature property: RealFeel™ Temperature being returned.
     *
     * @return the realFeelTemperature value.
     */
    public WeatherUnitDetails getRealFeelTemperature() {
        return this.realFeelTemperature;
    }

    /**
     * Get the realFeelTemperatureShade property: RealFeel™ Temperature being returned. Describes what the temperature
     * really feels like in the shade.
     *
     * @return the realFeelTemperatureShade value.
     */
    public WeatherUnitDetails getRealFeelTemperatureShade() {
        return this.realFeelTemperatureShade;
    }

    /**
     * Get the relativeHumidity property: Relative humidity is the amount of water vapor present in air expressed as a
     * percentage of the amount needed for saturation at the same temperature.
     *
     * @return the relativeHumidity value.
     */
    public Integer getRelativeHumidity() {
        return this.relativeHumidity;
    }

    /**
     * Get the dewPoint property: The dewpoint temperature in specified unit. The dewpoint temperature is the
     * temperature that the air must be cooled to in order to reach saturation.
     *
     * @return the dewPoint value.
     */
    public WeatherUnitDetails getDewPoint() {
        return this.dewPoint;
    }

    /**
     * Get the wind property: Wind details being returned including speed and direction.
     *
     * @return the wind value.
     */
    public WindDetails getWind() {
        return this.wind;
    }

    /**
     * Get the windGust property: Wind gust. Wind gust is a sudden, brief increase in speed of the wind.
     *
     * @return the windGust value.
     */
    public WindDetails getWindGust() {
        return this.windGust;
    }

    /**
     * Get the uvIndex property: Measure of the strength of the ultraviolet radiation from the sun. Supported values
     * are: * `0-2` - Low danger from the sun's UV rays or the average person. * `3-5` - Moderate risk of harm from
     * unprotected sun exposure. * `6-7` - High risk of harm from unprotected sun exposure. * `8-10` - Very high risk of
     * harm from unprotected sun exposure. * `11+` - Extreme risk of harm from unprotected sun exposure.
     *
     * @return the uvIndex value.
     */
    public Integer getUvIndex() {
        return this.uvIndex;
    }

    /**
     * Get the uvIndexDescription property: Phrase associated with the `uvIndex`.
     *
     * @return the uvIndexDescription value.
     */
    public String getUvIndexDescription() {
        return this.uvIndexDescription;
    }

    /**
     * Get the visibility property: Visibility in specified unit. A measure of the distance at which an object or light
     * can be clearly discerned.
     *
     * @return the visibility value.
     */
    public WeatherUnitDetails getVisibility() {
        return this.visibility;
    }

    /**
     * Get the obstructionsToVisibility property: Cause of limited visibility.
     *
     * @return the obstructionsToVisibility value.
     */
    public String getObstructionsToVisibility() {
        return this.obstructionsToVisibility;
    }

    /**
     * Get the cloudCover property: Percent representing cloud cover.
     *
     * @return the cloudCover value.
     */
    public Integer getCloudCover() {
        return this.cloudCover;
    }

    /**
     * Get the cloudCeiling property: Cloud ceiling in specified unit. The ceiling is a measurement of the height of the
     * base of the lowest clouds.
     *
     * @return the cloudCeiling value.
     */
    public WeatherUnitDetails getCloudCeiling() {
        return this.cloudCeiling;
    }

    /**
     * Get the pressure property: Atmospheric pressure in specified unit.
     *
     * @return the pressure value.
     */
    public WeatherUnitDetails getPressure() {
        return this.pressure;
    }

    /**
     * Get the pressureTendency property: Atmospheric pressure change.
     *
     * @return the pressureTendency value.
     */
    public PressureTendency getPressureTendency() {
        return this.pressureTendency;
    }

    /**
     * Get the pastTwentyFourHourTemperatureDeparture property: Departure from the temperature observed 24 hours ago in
     * specified unit.
     *
     * @return the pastTwentyFourHourTemperatureDeparture value.
     */
    public WeatherUnitDetails getPastTwentyFourHourTemperatureDeparture() {
        return this.pastTwentyFourHourTemperatureDeparture;
    }

    /**
     * Get the apparentTemperature property: Perceived outdoor temperature caused by the combination of air temperature,
     * relative humidity, and wind speed in specified unit.
     *
     * @return the apparentTemperature value.
     */
    public WeatherUnitDetails getApparentTemperature() {
        return this.apparentTemperature;
    }

    /**
     * Get the windChillTemperature property: Perceived air temperature on exposed skin due to wind.
     *
     * @return the windChillTemperature value.
     */
    public WeatherUnitDetails getWindChillTemperature() {
        return this.windChillTemperature;
    }

    /**
     * Get the wetBulbTemperature property: The temperature to which air may be cooled by evaporating water into it at
     * constant pressure until it reaches saturation.
     *
     * @return the wetBulbTemperature value.
     */
    public WeatherUnitDetails getWetBulbTemperature() {
        return this.wetBulbTemperature;
    }

    /**
     * Get the precipitationSummary property: Summary of precipitation amounts over the past 24 hours.
     *
     * @return the precipitationSummary value.
     */
    public PrecipitationSummary getPrecipitationSummary() {
        return this.precipitationSummary;
    }

    /**
     * Get the temperatureSummary property: Summary of temperature fluctuations over the past 6, 12, and 24 hours.
     *
     * @return the temperatureSummary value.
     */
    public TemperatureSummary getTemperatureSummary() {
        return this.temperatureSummary;
    }
}
