// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// Code generated by Microsoft (R) AutoRest Code Generator.

package com.azure.maps.traffic.models;

import com.azure.core.annotation.Immutable;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.OffsetDateTime;

/** The TrafficIncidentPointOfInterest model. */
@Immutable
public final class TrafficIncidentPointOfInterest {
    /*
     * ID of the traffic incident
     */
    @JsonProperty(value = "id", access = JsonProperty.Access.WRITE_ONLY)
    private String id;

    /*
     * The point where an icon of the cluster or raw incident should be drawn,
     * expressed in the requested projection. This is affected by traffic
     * style, zoom level and road type
     */
    @JsonProperty(value = "p", access = JsonProperty.Access.WRITE_ONLY)
    private MapsPoint point;

    /*
     * The icon category associated with this incident. Values are numbers in
     * the range 0-13, with the following meanings -- 0: Unknown, 1: Accident,
     * 2: Fog, 3: Dangerous Conditions, 4: Rain, 5: Ice, 6: Jam, 7: Lane
     * Closed, 8: Road Closed, 9: Road Works, 10: Wind, 11: Flooding, 12:
     * Detour, 13: Cluster
     */
    @JsonProperty(value = "ic", access = JsonProperty.Access.WRITE_ONLY)
    private IconCategory iconCategory;

    /*
     * The magnitude of delay associated with incident. These values correspond
     * to incident colors in the traffic tiles
     */
    @JsonProperty(value = "ty", access = JsonProperty.Access.WRITE_ONLY)
    private DelayMagnitude magnitudeOfDelay;

    /*
     * Bottom left coordinate of the cluster in the projection of the request
     */
    @JsonProperty(value = "cbl", access = JsonProperty.Access.WRITE_ONLY)
    private MapsPoint bottomLeftCoordinate;

    /*
     * Top right coordinate of the cluster in the projection of the request
     */
    @JsonProperty(value = "ctr", access = JsonProperty.Access.WRITE_ONLY)
    private MapsPoint topLeftCoordinate;

    /*
     * Cluster size: the number of incidents in the cluster
     */
    @JsonProperty(value = "cs", access = JsonProperty.Access.WRITE_ONLY)
    private Integer clusterSize;

    /*
     * Length of the incident in meters
     */
    @JsonProperty(value = "l", access = JsonProperty.Access.WRITE_ONLY)
    private Integer lengthInMeters;

    /*
     * The road number(s) affected by the incident. Multiple road numbers will
     * delimited by slashes
     */
    @JsonProperty(value = "r", access = JsonProperty.Access.WRITE_ONLY)
    private String roadNumbers;

    /*
     * Start date of the incident, if available. The date is described in the
     * ISO8601 format.
     */
    @JsonProperty(value = "sd", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime startDate;

    /*
     * Estimated end date of the incident, if available. The date is described
     * in the ISO8601 format.
     */
    @JsonProperty(value = "ed", access = JsonProperty.Access.WRITE_ONLY)
    private OffsetDateTime endDate;

    /*
     * Delay caused by the incident in seconds (except in road closures)
     */
    @JsonProperty(value = "dl", access = JsonProperty.Access.WRITE_ONLY)
    private Integer delayInSeconds;

    /*
     * To: the name of the intersection or location where the traffic due to
     * the incident ends
     */
    @JsonProperty(value = "t", access = JsonProperty.Access.WRITE_ONLY)
    private String trafficEndLocation;

    /*
     * From: the name of the intersection or location where the traffic due to
     * the incident starts
     */
    @JsonProperty(value = "f", access = JsonProperty.Access.WRITE_ONLY)
    private String trafficStartLocation;

    /*
     * Description of the incident in the language requested
     */
    @JsonProperty(value = "d", access = JsonProperty.Access.WRITE_ONLY)
    private String description;

    /*
     * Cause of the incident, where available, in the language requested
     */
    @JsonProperty(value = "c", access = JsonProperty.Access.WRITE_ONLY)
    private String cause;

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

    /**
     * Get the id property: ID of the traffic incident.
     *
     * @return the id value.
     */
    public String getId() {
        return this.id;
    }

    /**
     * Get the point property: The point where an icon of the cluster or raw incident should be drawn, expressed in the
     * requested projection. This is affected by traffic style, zoom level and road type.
     *
     * @return the point value.
     */
    public MapsPoint getPoint() {
        return this.point;
    }

    /**
     * Get the iconCategory property: The icon category associated with this incident. Values are numbers in the range
     * 0-13, with the following meanings -- 0: Unknown, 1: Accident, 2: Fog, 3: Dangerous Conditions, 4: Rain, 5: Ice,
     * 6: Jam, 7: Lane Closed, 8: Road Closed, 9: Road Works, 10: Wind, 11: Flooding, 12: Detour, 13: Cluster.
     *
     * @return the iconCategory value.
     */
    public IconCategory getIconCategory() {
        return this.iconCategory;
    }

    /**
     * Get the magnitudeOfDelay property: The magnitude of delay associated with incident. These values correspond to
     * incident colors in the traffic tiles.
     *
     * @return the magnitudeOfDelay value.
     */
    public DelayMagnitude getMagnitudeOfDelay() {
        return this.magnitudeOfDelay;
    }

    /**
     * Get the bottomLeftCoordinate property: Bottom left coordinate of the cluster in the projection of the request.
     *
     * @return the bottomLeftCoordinate value.
     */
    public MapsPoint getBottomLeftCoordinate() {
        return this.bottomLeftCoordinate;
    }

    /**
     * Get the topLeftCoordinate property: Top right coordinate of the cluster in the projection of the request.
     *
     * @return the topLeftCoordinate value.
     */
    public MapsPoint getTopLeftCoordinate() {
        return this.topLeftCoordinate;
    }

    /**
     * Get the clusterSize property: Cluster size: the number of incidents in the cluster.
     *
     * @return the clusterSize value.
     */
    public Integer getClusterSize() {
        return this.clusterSize;
    }

    /**
     * Get the lengthInMeters property: Length of the incident in meters.
     *
     * @return the lengthInMeters value.
     */
    public Integer getLengthInMeters() {
        return this.lengthInMeters;
    }

    /**
     * Get the roadNumbers property: The road number(s) affected by the incident. Multiple road numbers will delimited
     * by slashes.
     *
     * @return the roadNumbers value.
     */
    public String getRoadNumbers() {
        return this.roadNumbers;
    }

    /**
     * Get the startDate property: Start date of the incident, if available. The date is described in the ISO8601
     * format.
     *
     * @return the startDate value.
     */
    public OffsetDateTime getStartDate() {
        return this.startDate;
    }

    /**
     * Get the endDate property: Estimated end date of the incident, if available. The date is described in the ISO8601
     * format.
     *
     * @return the endDate value.
     */
    public OffsetDateTime getEndDate() {
        return this.endDate;
    }

    /**
     * Get the delayInSeconds property: Delay caused by the incident in seconds (except in road closures).
     *
     * @return the delayInSeconds value.
     */
    public Integer getDelayInSeconds() {
        return this.delayInSeconds;
    }

    /**
     * Get the trafficEndLocation property: To: the name of the intersection or location where the traffic due to the
     * incident ends.
     *
     * @return the trafficEndLocation value.
     */
    public String getTrafficEndLocation() {
        return this.trafficEndLocation;
    }

    /**
     * Get the trafficStartLocation property: From: the name of the intersection or location where the traffic due to
     * the incident starts.
     *
     * @return the trafficStartLocation value.
     */
    public String getTrafficStartLocation() {
        return this.trafficStartLocation;
    }

    /**
     * Get the description property: Description of the incident in the language requested.
     *
     * @return the description value.
     */
    public String getDescription() {
        return this.description;
    }

    /**
     * Get the cause property: Cause of the incident, where available, in the language requested.
     *
     * @return the cause value.
     */
    public String getCause() {
        return this.cause;
    }
}
