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

package com.azure.health.insights.clinicalmatching.models;

import com.azure.core.annotation.Immutable;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * A geographic area, expressed as a `Circle` geometry represented using a `GeoJSON Feature` (see [GeoJSON
 * spec](https://tools.ietf.org/html/rfc7946)).
 */
@Immutable
public final class GeographicArea {
    /*
     * `GeoJSON` type.
     */
    @JsonProperty(value = "type", required = true)
    private GeoJsonType type;

    /*
     * `GeoJSON` geometry, representing the area circle's center.
     */
    @JsonProperty(value = "geometry", required = true)
    private AreaGeometry geometry;

    /*
     * `GeoJSON` object properties.
     */
    @JsonProperty(value = "properties", required = true)
    private AreaProperties properties;

    /**
     * Creates an instance of GeographicArea class.
     *
     * @param type the type value to set.
     * @param geometry the geometry value to set.
     * @param properties the properties value to set.
     */
    @JsonCreator
    public GeographicArea(
            @JsonProperty(value = "type", required = true) GeoJsonType type,
            @JsonProperty(value = "geometry", required = true) AreaGeometry geometry,
            @JsonProperty(value = "properties", required = true) AreaProperties properties) {
        this.type = type;
        this.geometry = geometry;
        this.properties = properties;
    }

    /**
     * Get the type property: `GeoJSON` type.
     *
     * @return the type value.
     */
    public GeoJsonType getType() {
        return this.type;
    }

    /**
     * Get the geometry property: `GeoJSON` geometry, representing the area circle's center.
     *
     * @return the geometry value.
     */
    public AreaGeometry getGeometry() {
        return this.geometry;
    }

    /**
     * Get the properties property: `GeoJSON` object properties.
     *
     * @return the properties value.
     */
    public AreaProperties getProperties() {
        return this.properties;
    }
}
