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

/** The DailyForecastDetail model. */
@Fluent
public final class DailyForecastDetail {
    /*
     * 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 icon. Displayed in specified language. For example, 'Sunny'.
     */
    @JsonProperty(value = "iconPhrase")
    private String iconPhrase;

    /*
     * Local weather data provider information.
     */
    @JsonProperty(value = "localSource")
    private LocalSource localSource;

    /*
     * 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 the type of precipitation ("Rain" "Snow" "Ice" or "Mix"). If dbz is zero, precipitationType is not
     * present in the response.
     */
    @JsonProperty(value = "precipitationType")
    private PrecipitationType precipitationType;

    /*
     * Description of the intensity.
     */
    @JsonProperty(value = "precipitationIntensity")
    private String precipitationIntensity;

    /*
     * Phrase description of the forecast in specified language. Azure Maps attempts to keep this phrase under 30
     * characters in length, but some languages/weather events may result in a longer phrase length, exceeding 30
     * characters.
     */
    @JsonProperty(value = "shortPhrase")
    private String shortDescription;

    /*
     * Phrase description of the forecast in specified language. Azure Maps attempts to keep this phrase under 100
     * characters in length, but some languages/weather events may result in a longer phrase length, exceeding 100
     * characters.
     */
    @JsonProperty(value = "longPhrase")
    private String longPhrase;

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

    /*
     * Percent representing the probability of a thunderstorm. For example, '80'.
     */
    @JsonProperty(value = "thunderstormProbability")
    private Integer thunderstormProbability;

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

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

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

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

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

    /*
     * Hours of precipitation
     */
    @JsonProperty(value = "hoursOfPrecipitation")
    private Float hoursOfPrecipitation;

    /*
     * Hours of rain.
     */
    @JsonProperty(value = "hoursOfRain")
    private Float hoursOfRain;

    /*
     * Hours of snow.
     */
    @JsonProperty(value = "hoursOfSnow")
    private Float hoursOfSnow;

    /*
     * Hours of ice.
     */
    @JsonProperty(value = "hoursOfIce")
    private Float hoursOfIce;

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

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

    /**
     * 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 icon. Displayed in specified language. For example,
     * 'Sunny'.
     *
     * @return the iconPhrase value.
     */
    public String getIconPhrase() {
        return this.iconPhrase;
    }

    /**
     * Get the localSource property: Local weather data provider information.
     *
     * @return the localSource value.
     */
    public LocalSource getLocalSource() {
        return this.localSource;
    }

    /**
     * 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 hasPrecipitation() {
        return this.hasPrecipitation;
    }

    /**
     * Get the precipitationType property: Specifies the type of precipitation ("Rain" "Snow" "Ice" or "Mix"). If dbz is
     * zero, precipitationType is not present in the response.
     *
     * @return the precipitationType value.
     */
    public PrecipitationType getPrecipitationType() {
        return this.precipitationType;
    }

    /**
     * Get the precipitationIntensity property: Description of the intensity.
     *
     * @return the precipitationIntensity value.
     */
    public String getPrecipitationIntensity() {
        return this.precipitationIntensity;
    }

    /**
     * Get the shortDescription property: Phrase description of the forecast in specified language. Azure Maps attempts
     * to keep this phrase under 30 characters in length, but some languages/weather events may result in a longer
     * phrase length, exceeding 30 characters.
     *
     * @return the shortDescription value.
     */
    public String getShortDescription() {
        return this.shortDescription;
    }

    /**
     * Get the longPhrase property: Phrase description of the forecast in specified language. Azure Maps attempts to
     * keep this phrase under 100 characters in length, but some languages/weather events may result in a longer phrase
     * length, exceeding 100 characters.
     *
     * @return the longPhrase value.
     */
    public String getLongPhrase() {
        return this.longPhrase;
    }

    /**
     * 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 thunderstormProbability property: Percent representing the probability of a thunderstorm. For example,
     * '80'.
     *
     * @return the thunderstormProbability value.
     */
    public Integer getThunderstormProbability() {
        return this.thunderstormProbability;
    }

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

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

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

    /**
     * Get the wind property: Wind details being returned including speed and direction.
     *
     * @return the wind value.
     */
    public WindDetails getWindUnitDetails() {
        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 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 getRainUnitDetails() {
        return this.rain;
    }

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

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

    /**
     * Get the hoursOfPrecipitation property: Hours of precipitation.
     *
     * @return the hoursOfPrecipitation value.
     */
    public Float getHoursOfPrecipitation() {
        return this.hoursOfPrecipitation;
    }

    /**
     * Get the hoursOfRain property: Hours of rain.
     *
     * @return the hoursOfRain value.
     */
    public Float getHoursOfRain() {
        return this.hoursOfRain;
    }

    /**
     * Get the hoursOfSnow property: Hours of snow.
     *
     * @return the hoursOfSnow value.
     */
    public Float getHoursOfSnow() {
        return this.hoursOfSnow;
    }

    /**
     * Get the hoursOfIce property: Hours of ice.
     *
     * @return the hoursOfIce value.
     */
    public Float getHoursOfIce() {
        return this.hoursOfIce;
    }

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