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

package com.azure.media.videoanalyzer.edge.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;

/** Base class for Azure Cognitive Services Spatial Analysis typed operations. */
@JsonTypeInfo(
        use = JsonTypeInfo.Id.NAME,
        include = JsonTypeInfo.As.PROPERTY,
        property = "@type",
        defaultImpl = SpatialAnalysisTypedOperationBase.class)
@JsonTypeName("SpatialAnalysisTypedOperationBase")
@JsonSubTypes({
    @JsonSubTypes.Type(
            name = "#Microsoft.VideoAnalyzer.SpatialAnalysisPersonCountOperation",
            value = SpatialAnalysisPersonCountOperation.class),
    @JsonSubTypes.Type(
            name = "#Microsoft.VideoAnalyzer.SpatialAnalysisPersonZoneCrossingOperation",
            value = SpatialAnalysisPersonZoneCrossingOperation.class),
    @JsonSubTypes.Type(
            name = "#Microsoft.VideoAnalyzer.SpatialAnalysisPersonDistanceOperation",
            value = SpatialAnalysisPersonDistanceOperation.class),
    @JsonSubTypes.Type(
            name = "#Microsoft.VideoAnalyzer.SpatialAnalysisPersonLineCrossingOperation",
            value = SpatialAnalysisPersonLineCrossingOperation.class)
})
@Fluent
public class SpatialAnalysisTypedOperationBase extends SpatialAnalysisOperationBase {
    /*
     * If set to 'true', enables debugging mode for this operation.
     */
    @JsonProperty(value = "debug")
    private String debug;

    /*
     * Advanced calibration configuration.
     */
    @JsonProperty(value = "calibrationConfiguration")
    private String calibrationConfiguration;

    /*
     * Advanced camera configuration.
     */
    @JsonProperty(value = "cameraConfiguration")
    private String cameraConfiguration;

    /*
     * Advanced camera calibrator configuration.
     */
    @JsonProperty(value = "cameraCalibratorNodeConfiguration")
    private String cameraCalibratorNodeConfiguration;

    /*
     * Advanced detector node configuration.
     */
    @JsonProperty(value = "detectorNodeConfiguration")
    private String detectorNodeConfiguration;

    /*
     * Advanced tracker node configuration.
     */
    @JsonProperty(value = "trackerNodeConfiguration")
    private String trackerNodeConfiguration;

    /*
     * If set to 'true', enables face mask detection for this operation.
     */
    @JsonProperty(value = "enableFaceMaskClassifier")
    private String enableFaceMaskClassifier;

    /**
     * Get the debug property: If set to 'true', enables debugging mode for this operation.
     *
     * @return the debug value.
     */
    public String getDebug() {
        return this.debug;
    }

    /**
     * Set the debug property: If set to 'true', enables debugging mode for this operation.
     *
     * @param debug the debug value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setDebug(String debug) {
        this.debug = debug;
        return this;
    }

    /**
     * Get the calibrationConfiguration property: Advanced calibration configuration.
     *
     * @return the calibrationConfiguration value.
     */
    public String getCalibrationConfiguration() {
        return this.calibrationConfiguration;
    }

    /**
     * Set the calibrationConfiguration property: Advanced calibration configuration.
     *
     * @param calibrationConfiguration the calibrationConfiguration value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setCalibrationConfiguration(String calibrationConfiguration) {
        this.calibrationConfiguration = calibrationConfiguration;
        return this;
    }

    /**
     * Get the cameraConfiguration property: Advanced camera configuration.
     *
     * @return the cameraConfiguration value.
     */
    public String getCameraConfiguration() {
        return this.cameraConfiguration;
    }

    /**
     * Set the cameraConfiguration property: Advanced camera configuration.
     *
     * @param cameraConfiguration the cameraConfiguration value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setCameraConfiguration(String cameraConfiguration) {
        this.cameraConfiguration = cameraConfiguration;
        return this;
    }

    /**
     * Get the cameraCalibratorNodeConfiguration property: Advanced camera calibrator configuration.
     *
     * @return the cameraCalibratorNodeConfiguration value.
     */
    public String getCameraCalibratorNodeConfiguration() {
        return this.cameraCalibratorNodeConfiguration;
    }

    /**
     * Set the cameraCalibratorNodeConfiguration property: Advanced camera calibrator configuration.
     *
     * @param cameraCalibratorNodeConfiguration the cameraCalibratorNodeConfiguration value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setCameraCalibratorNodeConfiguration(
            String cameraCalibratorNodeConfiguration) {
        this.cameraCalibratorNodeConfiguration = cameraCalibratorNodeConfiguration;
        return this;
    }

    /**
     * Get the detectorNodeConfiguration property: Advanced detector node configuration.
     *
     * @return the detectorNodeConfiguration value.
     */
    public String getDetectorNodeConfiguration() {
        return this.detectorNodeConfiguration;
    }

    /**
     * Set the detectorNodeConfiguration property: Advanced detector node configuration.
     *
     * @param detectorNodeConfiguration the detectorNodeConfiguration value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setDetectorNodeConfiguration(String detectorNodeConfiguration) {
        this.detectorNodeConfiguration = detectorNodeConfiguration;
        return this;
    }

    /**
     * Get the trackerNodeConfiguration property: Advanced tracker node configuration.
     *
     * @return the trackerNodeConfiguration value.
     */
    public String getTrackerNodeConfiguration() {
        return this.trackerNodeConfiguration;
    }

    /**
     * Set the trackerNodeConfiguration property: Advanced tracker node configuration.
     *
     * @param trackerNodeConfiguration the trackerNodeConfiguration value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setTrackerNodeConfiguration(String trackerNodeConfiguration) {
        this.trackerNodeConfiguration = trackerNodeConfiguration;
        return this;
    }

    /**
     * Get the enableFaceMaskClassifier property: If set to 'true', enables face mask detection for this operation.
     *
     * @return the enableFaceMaskClassifier value.
     */
    public String getEnableFaceMaskClassifier() {
        return this.enableFaceMaskClassifier;
    }

    /**
     * Set the enableFaceMaskClassifier property: If set to 'true', enables face mask detection for this operation.
     *
     * @param enableFaceMaskClassifier the enableFaceMaskClassifier value to set.
     * @return the SpatialAnalysisTypedOperationBase object itself.
     */
    public SpatialAnalysisTypedOperationBase setEnableFaceMaskClassifier(String enableFaceMaskClassifier) {
        this.enableFaceMaskClassifier = enableFaceMaskClassifier;
        return this;
    }
}
