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

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

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

    /*
     * Minimum pressure associated with the storm. May be NULL.
     */
    @JsonProperty(value = "minimumPressure")
    private WeatherUnitDetails minimumPressure;

    /*
     * The storm movement information.
     */
    @JsonProperty(value = "movement")
    private WindDetails movement;

    /*
     * Storm status, in English.
     */
    @JsonProperty(value = "status")
    private String status;

    /*
     * True when the depression is classified as a subtropical cyclone.
     */
    @JsonProperty(value = "isSubtropical")
    private Boolean isSubtropical;

    /*
     * True when storm may develop into a Tropical System.
     */
    @JsonProperty(value = "hasTropicalPotential")
    private Boolean hasTropicalPotential;

    /*
     * True when the storm is weakening away, and will no longer become a tropical system.
     */
    @JsonProperty(value = "isPostTropical")
    private Boolean isPostTropical;

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

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

    /**
     * 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 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 minimumPressure property: Minimum pressure associated with the storm. May be NULL.
     *
     * @return the minimumPressure value.
     */
    public WeatherUnitDetails getMinimumPressure() {
        return this.minimumPressure;
    }

    /**
     * Get the movement property: The storm movement information.
     *
     * @return the movement value.
     */
    public WindDetails getMovement() {
        return this.movement;
    }

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

    /**
     * Get the isSubtropical property: True when the depression is classified as a subtropical cyclone.
     *
     * @return the isSubtropical value.
     */
    public Boolean isSubtropical() {
        return this.isSubtropical;
    }

    /**
     * Get the hasTropicalPotential property: True when storm may develop into a Tropical System.
     *
     * @return the hasTropicalPotential value.
     */
    public Boolean isHasTropicalPotential() {
        return this.hasTropicalPotential;
    }

    /**
     * Get the isPostTropical property: True when the storm is weakening away, and will no longer become a tropical
     * system.
     *
     * @return the isPostTropical value.
     */
    public Boolean isPostTropical() {
        return this.isPostTropical;
    }

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