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

package com.azure.communication.callautomation.implementation.models;

import com.azure.core.annotation.Fluent;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.List;

/** The request payload start for call recording operation with call locator. */
@Fluent
public final class StartCallRecordingRequestInternal {
    /*
     * The call locator.
     */
    @JsonProperty(value = "callLocator", required = true)
    private CallLocatorInternal callLocator;

    /*
     * The uri to send notifications to.
     */
    @JsonProperty(value = "recordingStateCallbackUri")
    private String recordingStateCallbackUri;

    /*
     * The content type of call recording.
     */
    @JsonProperty(value = "recordingContentType")
    private RecordingContentInternal recordingContentType;

    /*
     * The channel type of call recording.
     */
    @JsonProperty(value = "recordingChannelType")
    private RecordingChannelInternal recordingChannelType;

    /*
     * The format type of call recording.
     */
    @JsonProperty(value = "recordingFormatType")
    private RecordingFormatInternal recordingFormatType;

    /*
     * The sequential order in which audio channels are assigned to
     * participants in the unmixed recording.
     * When 'recordingChannelType' is set to 'unmixed' and
     * `audioChannelParticipantOrdering is not specified,
     * the audio channel to participant mapping will be automatically assigned
     * based on the order in which participant
     * first audio was detected.  Channel to participant mapping details can be
     * found in the metadata of the recording.
     */
    @JsonProperty(value = "audioChannelParticipantOrdering")
    private List<CommunicationIdentifierModel> audioChannelParticipantOrdering;

    /*
     * The channel affinity of call recording
     * When 'recordingChannelType' is set to 'unmixed', if channelAffinity is
     * not specified, 'channel' will be automatically assigned.
     * Channel-Participant mapping details can be found in the metadata of the
     * recording.
     * ///
     */
    @JsonProperty(value = "channelAffinity")
    private List<ChannelAffinityInternal> channelAffinity;

    /*
     * Optional property to specify location where recording will be stored
     */
    @JsonProperty(value = "externalStorage")
    private ExternalStorageInternal externalStorage;

    /**
     * Get the callLocator property: The call locator.
     *
     * @return the callLocator value.
     */
    public CallLocatorInternal getCallLocator() {
        return this.callLocator;
    }

    /**
     * Set the callLocator property: The call locator.
     *
     * @param callLocator the callLocator value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setCallLocator(CallLocatorInternal callLocator) {
        this.callLocator = callLocator;
        return this;
    }

    /**
     * Get the recordingStateCallbackUri property: The uri to send notifications to.
     *
     * @return the recordingStateCallbackUri value.
     */
    public String getRecordingStateCallbackUri() {
        return this.recordingStateCallbackUri;
    }

    /**
     * Set the recordingStateCallbackUri property: The uri to send notifications to.
     *
     * @param recordingStateCallbackUri the recordingStateCallbackUri value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setRecordingStateCallbackUri(String recordingStateCallbackUri) {
        this.recordingStateCallbackUri = recordingStateCallbackUri;
        return this;
    }

    /**
     * Get the recordingContentType property: The content type of call recording.
     *
     * @return the recordingContentType value.
     */
    public RecordingContentInternal getRecordingContentType() {
        return this.recordingContentType;
    }

    /**
     * Set the recordingContentType property: The content type of call recording.
     *
     * @param recordingContentType the recordingContentType value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setRecordingContentType(RecordingContentInternal recordingContentType) {
        this.recordingContentType = recordingContentType;
        return this;
    }

    /**
     * Get the recordingChannelType property: The channel type of call recording.
     *
     * @return the recordingChannelType value.
     */
    public RecordingChannelInternal getRecordingChannelType() {
        return this.recordingChannelType;
    }

    /**
     * Set the recordingChannelType property: The channel type of call recording.
     *
     * @param recordingChannelType the recordingChannelType value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setRecordingChannelType(RecordingChannelInternal recordingChannelType) {
        this.recordingChannelType = recordingChannelType;
        return this;
    }

    /**
     * Get the recordingFormatType property: The format type of call recording.
     *
     * @return the recordingFormatType value.
     */
    public RecordingFormatInternal getRecordingFormatType() {
        return this.recordingFormatType;
    }

    /**
     * Set the recordingFormatType property: The format type of call recording.
     *
     * @param recordingFormatType the recordingFormatType value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setRecordingFormatType(RecordingFormatInternal recordingFormatType) {
        this.recordingFormatType = recordingFormatType;
        return this;
    }

    /**
     * Get the audioChannelParticipantOrdering property: The sequential order in which audio channels are assigned to
     * participants in the unmixed recording. When 'recordingChannelType' is set to 'unmixed' and
     * `audioChannelParticipantOrdering is not specified, the audio channel to participant mapping will be automatically
     * assigned based on the order in which participant first audio was detected. Channel to participant mapping details
     * can be found in the metadata of the recording.
     *
     * @return the audioChannelParticipantOrdering value.
     */
    public List<CommunicationIdentifierModel> getAudioChannelParticipantOrdering() {
        return this.audioChannelParticipantOrdering;
    }

    /**
     * Set the audioChannelParticipantOrdering property: The sequential order in which audio channels are assigned to
     * participants in the unmixed recording. When 'recordingChannelType' is set to 'unmixed' and
     * `audioChannelParticipantOrdering is not specified, the audio channel to participant mapping will be automatically
     * assigned based on the order in which participant first audio was detected. Channel to participant mapping details
     * can be found in the metadata of the recording.
     *
     * @param audioChannelParticipantOrdering the audioChannelParticipantOrdering value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setAudioChannelParticipantOrdering(
            List<CommunicationIdentifierModel> audioChannelParticipantOrdering) {
        this.audioChannelParticipantOrdering = audioChannelParticipantOrdering;
        return this;
    }

    /**
     * Get the channelAffinity property: The channel affinity of call recording When 'recordingChannelType' is set to
     * 'unmixed', if channelAffinity is not specified, 'channel' will be automatically assigned. Channel-Participant
     * mapping details can be found in the metadata of the recording. ///.
     *
     * @return the channelAffinity value.
     */
    public List<ChannelAffinityInternal> getChannelAffinity() {
        return this.channelAffinity;
    }

    /**
     * Set the channelAffinity property: The channel affinity of call recording When 'recordingChannelType' is set to
     * 'unmixed', if channelAffinity is not specified, 'channel' will be automatically assigned. Channel-Participant
     * mapping details can be found in the metadata of the recording. ///.
     *
     * @param channelAffinity the channelAffinity value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setChannelAffinity(List<ChannelAffinityInternal> channelAffinity) {
        this.channelAffinity = channelAffinity;
        return this;
    }

    /**
     * Get the externalStorage property: Optional property to specify location where recording will be stored.
     *
     * @return the externalStorage value.
     */
    public ExternalStorageInternal getExternalStorage() {
        return this.externalStorage;
    }

    /**
     * Set the externalStorage property: Optional property to specify location where recording will be stored.
     *
     * @param externalStorage the externalStorage value to set.
     * @return the StartCallRecordingRequestInternal object itself.
     */
    public StartCallRecordingRequestInternal setExternalStorage(ExternalStorageInternal externalStorage) {
        this.externalStorage = externalStorage;
        return this;
    }
}
