// 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.util.List;

/** The WaypointForecast model. */
@Fluent
public final class WaypointForecast {
    /*
     * 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;

    /*
     * A displayable short phrase describing the forecasted conditions and precipitation intensity/type.
     */
    @JsonProperty(value = "shortPhrase")
    private String shortDescription;

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

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

    /*
     * Specific value of a given unit related to weather.
     */
    @JsonProperty(value = "temperature")
    private WeatherUnitDetails temperature;

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

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

    /*
     * Precipitation forecast of the weather along the route.
     */
    @JsonProperty(value = "precipitation")
    private WeatherAlongRoutePrecipitation precipitation;

    /*
     * Estimation of thunderstorm intensity on an open scale. A value of 0 means there is no thunderstorm; values of 1
     * and higher mean there is a thunderstorm in increasing intensity.
     */
    @JsonProperty(value = "lightningCount")
    private Integer lightningCount;

    /*
     * A rating that indicates how blinding the sun is for the driver.
     */
    @JsonProperty(value = "sunGlare")
    private SunGlare sunGlare;

    /*
     * Description of the weather hazard affecting the trip.
     */
    @JsonProperty(value = "hazards")
    private WeatherHazards hazards;

    /*
     * List of weather hazard notifications.
     */
    @JsonProperty(value = "notifications")
    private List<WeatherNotification> notifications;

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

    /**
     * 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 shortDescription property: A displayable short phrase describing the forecasted conditions and
     * precipitation intensity/type.
     *
     * @return the shortDescription value.
     */
    public String getShortDescription() {
        return this.shortDescription;
    }

    /**
     * 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 cloudCover property: Percent representing cloud cover.
     *
     * @return the cloudCover value.
     */
    public Integer getCloudCover() {
        return this.cloudCover;
    }

    /**
     * Get the temperature property: Specific value of a given unit related to weather.
     *
     * @return the temperature value.
     */
    public WeatherUnitDetails getTemperature() {
        return this.temperature;
    }

    /**
     * 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 details being returned including speed and direction.
     *
     * @return the windGust value.
     */
    public WindDetails getWindGust() {
        return this.windGust;
    }

    /**
     * Get the precipitation property: Precipitation forecast of the weather along the route.
     *
     * @return the precipitation value.
     */
    public WeatherAlongRoutePrecipitation getPrecipitation() {
        return this.precipitation;
    }

    /**
     * Get the lightningCount property: Estimation of thunderstorm intensity on an open scale. A value of 0 means there
     * is no thunderstorm; values of 1 and higher mean there is a thunderstorm in increasing intensity.
     *
     * @return the lightningCount value.
     */
    public Integer getLightningCount() {
        return this.lightningCount;
    }

    /**
     * Get the sunGlare property: A rating that indicates how blinding the sun is for the driver.
     *
     * @return the sunGlare value.
     */
    public SunGlare getSunGlare() {
        return this.sunGlare;
    }

    /**
     * Get the hazards property: Description of the weather hazard affecting the trip.
     *
     * @return the hazards value.
     */
    public WeatherHazards getHazards() {
        return this.hazards;
    }

    /**
     * Get the notifications property: List of weather hazard notifications.
     *
     * @return the notifications value.
     */
    public List<WeatherNotification> getNotifications() {
        return this.notifications;
    }
}
