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

package com.azure.resourcemanager.mediaservices.models;

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

/**
 * Describes the transcription tracks in the output of a live event, generated using speech-to-text transcription. This
 * property is reserved for future use, any value set on this property will be ignored.
 */
@Fluent
public final class LiveEventTranscription {
    /*
     * Specifies the language (locale) to be used for speech-to-text transcription – it should match the spoken
     * language in the audio track. The value should be in BCP-47 format (e.g: 'en-US'). See
     * https://go.microsoft.com/fwlink/?linkid=2133742 for more information about the live transcription feature and
     * the list of supported languages.
     */
    @JsonProperty(value = "language")
    private String language;

    /*
     * Provides a mechanism to select the audio track in the input live feed, to which speech-to-text transcription is
     * applied. This property is reserved for future use, any value set on this property will be ignored.
     */
    @JsonProperty(value = "inputTrackSelection")
    private List<LiveEventInputTrackSelection> inputTrackSelection;

    /*
     * Describes a transcription track in the output of a live event, generated using speech-to-text transcription.
     * This property is reserved for future use, any value set on this property will be ignored.
     */
    @JsonProperty(value = "outputTranscriptionTrack")
    private LiveEventOutputTranscriptionTrack outputTranscriptionTrack;

    /** Creates an instance of LiveEventTranscription class. */
    public LiveEventTranscription() {
    }

    /**
     * Get the language property: Specifies the language (locale) to be used for speech-to-text transcription – it
     * should match the spoken language in the audio track. The value should be in BCP-47 format (e.g: 'en-US'). See
     * https://go.microsoft.com/fwlink/?linkid=2133742 for more information about the live transcription feature and the
     * list of supported languages.
     *
     * @return the language value.
     */
    public String language() {
        return this.language;
    }

    /**
     * Set the language property: Specifies the language (locale) to be used for speech-to-text transcription – it
     * should match the spoken language in the audio track. The value should be in BCP-47 format (e.g: 'en-US'). See
     * https://go.microsoft.com/fwlink/?linkid=2133742 for more information about the live transcription feature and the
     * list of supported languages.
     *
     * @param language the language value to set.
     * @return the LiveEventTranscription object itself.
     */
    public LiveEventTranscription withLanguage(String language) {
        this.language = language;
        return this;
    }

    /**
     * Get the inputTrackSelection property: Provides a mechanism to select the audio track in the input live feed, to
     * which speech-to-text transcription is applied. This property is reserved for future use, any value set on this
     * property will be ignored.
     *
     * @return the inputTrackSelection value.
     */
    public List<LiveEventInputTrackSelection> inputTrackSelection() {
        return this.inputTrackSelection;
    }

    /**
     * Set the inputTrackSelection property: Provides a mechanism to select the audio track in the input live feed, to
     * which speech-to-text transcription is applied. This property is reserved for future use, any value set on this
     * property will be ignored.
     *
     * @param inputTrackSelection the inputTrackSelection value to set.
     * @return the LiveEventTranscription object itself.
     */
    public LiveEventTranscription withInputTrackSelection(List<LiveEventInputTrackSelection> inputTrackSelection) {
        this.inputTrackSelection = inputTrackSelection;
        return this;
    }

    /**
     * Get the outputTranscriptionTrack property: Describes a transcription track in the output of a live event,
     * generated using speech-to-text transcription. This property is reserved for future use, any value set on this
     * property will be ignored.
     *
     * @return the outputTranscriptionTrack value.
     */
    public LiveEventOutputTranscriptionTrack outputTranscriptionTrack() {
        return this.outputTranscriptionTrack;
    }

    /**
     * Set the outputTranscriptionTrack property: Describes a transcription track in the output of a live event,
     * generated using speech-to-text transcription. This property is reserved for future use, any value set on this
     * property will be ignored.
     *
     * @param outputTranscriptionTrack the outputTranscriptionTrack value to set.
     * @return the LiveEventTranscription object itself.
     */
    public LiveEventTranscription withOutputTranscriptionTrack(
        LiveEventOutputTranscriptionTrack outputTranscriptionTrack) {
        this.outputTranscriptionTrack = outputTranscriptionTrack;
        return this;
    }

    /**
     * Validates the instance.
     *
     * @throws IllegalArgumentException thrown if the instance is not valid.
     */
    public void validate() {
        if (inputTrackSelection() != null) {
            inputTrackSelection().forEach(e -> e.validate());
        }
        if (outputTranscriptionTrack() != null) {
            outputTranscriptionTrack().validate();
        }
    }
}
