// 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.azure.core.models.GeoPosition;
import com.azure.maps.weather.implementation.models.LatLongPair;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** Government-issued storm forecast. */
@Fluent
public final class StormForecast {
    /*
     * Datetime the forecast is valid, displayed in ISO8601 format.
     */
    @JsonProperty(value = "dateTime")
    private String timestamp;

    /*
     * Datetime the forecast was created, displayed in ISO8601 format.
     */
    @JsonProperty(value = "initializedDateTime")
    private String initializedTimestamp;

    /*
     * Coordinates of the storm
     */
    @JsonProperty(value = "location")
    private LatLongPair coordinates;

    /*
     * Maximum wind gust speed associated with the storm. May be NULL.
     */
    @JsonProperty(value = "maxWindGust")
    private WeatherUnitDetails maxWindGust;

    /*
     * Maximum sustained wind speed associated with the storm. May be NULL.
     */
    @JsonProperty(value = "sustainedWind")
    private WeatherUnitDetails sustainedWind;

    /*
     * Storm status
     */
    @JsonProperty(value = "status")
    private String status;

    /*
     * Contains information about the forecast window for the storm during the specified time period (not the entire
     * cone). If windowGeometry=true in the request, this object will include geoJSON details for window geometry.
     */
    @JsonProperty(value = "window")
    private WeatherWindow weatherWindow;

    /*
     * Displayed when details=true or radiiGeometry=true in the request.
     */
    @JsonProperty(value = "windRadiiSummary")
    private List<StormWindRadiiSummary> windRadiiSummary;

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

    /**
     * Get the timestamp property: Datetime the forecast is valid, displayed in ISO8601 format.
     *
     * @return the timestamp value.
     */
    public String getTimestamp() {
        return this.timestamp;
    }

    /**
     * Get the initializedTimestamp property: Datetime the forecast was created, displayed in ISO8601 format.
     *
     * @return the initializedTimestamp value.
     */
    public String getInitializedTimestamp() {
        return this.initializedTimestamp;
    }

    /**
     * Get the coordinates property: Coordinates of the storm.
     *
     * @return the coordinates value.
     */
    public GeoPosition getCoordinates() {
        LatLongPair returnValue = this.coordinates;
        return new GeoPosition(returnValue.getLongitude(), returnValue.getLatitude());
    }

    /**
     * Get the maxWindGust property: Maximum wind gust speed associated with the storm. May be NULL.
     *
     * @return the maxWindGust value.
     */
    public WeatherUnitDetails getMaxWindGust() {
        return this.maxWindGust;
    }

    /**
     * Get the sustainedWind property: Maximum sustained wind speed associated with the storm. May be NULL.
     *
     * @return the sustainedWind value.
     */
    public WeatherUnitDetails getSustainedWind() {
        return this.sustainedWind;
    }

    /**
     * Get the status property: Storm status.
     *
     * @return the status value.
     */
    public String getStatus() {
        return this.status;
    }

    /**
     * Get the weatherWindow property: Contains information about the forecast window for the storm during the specified
     * time period (not the entire cone). If windowGeometry=true in the request, this object will include geoJSON
     * details for window geometry.
     *
     * @return the weatherWindow value.
     */
    public WeatherWindow getWeatherWindow() {
        return this.weatherWindow;
    }

    /**
     * Get the windRadiiSummary property: Displayed when details=true or radiiGeometry=true in the request.
     *
     * @return the windRadiiSummary value.
     */
    public List<StormWindRadiiSummary> getWindRadiiSummary() {
        return this.windRadiiSummary;
    }
}
