// 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 HourlyForecast model. */
@Fluent
public final class HourlyForecast {
    /*
     * Date and time of the forecast in ISO 8601 format, for example, 2019-10-27T19:39:57-08:00.
     */
    @JsonProperty(value = "date")
    private OffsetDateTime timestamp;

    /*
     * 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;

    /*
     * Phrase description of the weather icon.
     */
    @JsonProperty(value = "iconPhrase")
    private String iconPhrase;

    /*
     * 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;

    /*
     * Specifies whether or not it is daylight. True indicates day light.
     */
    @JsonProperty(value = "isDaylight")
    private Boolean isDaylight;

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

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

    /*
     * 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;

    /*
     * 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;

    /*
     * 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;

    /*
     * 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;

    /*
     * 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;

    /*
     * 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;

    /*
     * Percent representing the probability of precipitation. For example, '20'.
     */
    @JsonProperty(value = "precipitationProbability")
    private Integer precipitationProbability;

    /*
     * Percent representing the probability of rain. For example, '50'.
     */
    @JsonProperty(value = "rainProbability")
    private Integer rainProbability;

    /*
     * Percent representing the probability of snow. For example, '50'.
     */
    @JsonProperty(value = "snowProbability")
    private Integer snowProbability;

    /*
     * Percent representing the probability of snow. For example, '5'.
     */
    @JsonProperty(value = "iceProbability")
    private Integer iceProbability;

    /*
     * Total liquid equivalent of precipitation during the forecast period.
     */
    @JsonProperty(value = "totalLiquid")
    private WeatherUnitDetails totalLiquid;

    /*
     * Rain
     */
    @JsonProperty(value = "rain")
    private WeatherUnitDetails rain;

    /*
     * Snow
     */
    @JsonProperty(value = "snow")
    private WeatherUnitDetails snow;

    /*
     * Ice
     */
    @JsonProperty(value = "ice")
    private WeatherUnitDetails ice;

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

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

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

    /**
     * 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 iconPhrase property: Phrase description of the weather icon.
     *
     * @return the iconPhrase value.
     */
    public String getIconPhrase() {
        return this.iconPhrase;
    }

    /**
     * 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 isDaylight property: Specifies whether or not it is daylight. True indicates day light.
     *
     * @return the isDaylight value.
     */
    public Boolean isDaylight() {
        return this.isDaylight;
    }

    /**
     * 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. Describes what the temperature really
     * feels like in the shade.
     *
     * @return the realFeelTemperature value.
     */
    public WeatherUnitDetails getRealFeelTemperature() {
        return this.realFeelTemperature;
    }

    /**
     * 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 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 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 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 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 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 precipitationProbability property: Percent representing the probability of precipitation. For example,
     * '20'.
     *
     * @return the precipitationProbability value.
     */
    public Integer getPrecipitationProbability() {
        return this.precipitationProbability;
    }

    /**
     * Get the rainProbability property: Percent representing the probability of rain. For example, '50'.
     *
     * @return the rainProbability value.
     */
    public Integer getRainProbability() {
        return this.rainProbability;
    }

    /**
     * Get the snowProbability property: Percent representing the probability of snow. For example, '50'.
     *
     * @return the snowProbability value.
     */
    public Integer getSnowProbability() {
        return this.snowProbability;
    }

    /**
     * Get the iceProbability property: Percent representing the probability of snow. For example, '5'.
     *
     * @return the iceProbability value.
     */
    public Integer getIceProbability() {
        return this.iceProbability;
    }

    /**
     * Get the totalLiquid property: Total liquid equivalent of precipitation during the forecast period.
     *
     * @return the totalLiquid value.
     */
    public WeatherUnitDetails getTotalLiquid() {
        return this.totalLiquid;
    }

    /**
     * Get the rain property: Rain.
     *
     * @return the rain value.
     */
    public WeatherUnitDetails getRain() {
        return this.rain;
    }

    /**
     * Get the snow property: Snow.
     *
     * @return the snow value.
     */
    public WeatherUnitDetails getSnow() {
        return this.snow;
    }

    /**
     * Get the ice property: Ice.
     *
     * @return the ice value.
     */
    public WeatherUnitDetails getIce() {
        return this.ice;
    }

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