// 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;

/** Class to specify properties of all content keys in Streaming Policy. */
@Fluent
public final class StreamingPolicyContentKeys {
    /*
     * Default content key for an encryption scheme
     */
    @JsonProperty(value = "defaultKey")
    private DefaultKey defaultKey;

    /*
     * Representing tracks needs separate content key
     */
    @JsonProperty(value = "keyToTrackMappings")
    private List<StreamingPolicyContentKey> keyToTrackMappings;

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

    /**
     * Get the defaultKey property: Default content key for an encryption scheme.
     *
     * @return the defaultKey value.
     */
    public DefaultKey defaultKey() {
        return this.defaultKey;
    }

    /**
     * Set the defaultKey property: Default content key for an encryption scheme.
     *
     * @param defaultKey the defaultKey value to set.
     * @return the StreamingPolicyContentKeys object itself.
     */
    public StreamingPolicyContentKeys withDefaultKey(DefaultKey defaultKey) {
        this.defaultKey = defaultKey;
        return this;
    }

    /**
     * Get the keyToTrackMappings property: Representing tracks needs separate content key.
     *
     * @return the keyToTrackMappings value.
     */
    public List<StreamingPolicyContentKey> keyToTrackMappings() {
        return this.keyToTrackMappings;
    }

    /**
     * Set the keyToTrackMappings property: Representing tracks needs separate content key.
     *
     * @param keyToTrackMappings the keyToTrackMappings value to set.
     * @return the StreamingPolicyContentKeys object itself.
     */
    public StreamingPolicyContentKeys withKeyToTrackMappings(List<StreamingPolicyContentKey> keyToTrackMappings) {
        this.keyToTrackMappings = keyToTrackMappings;
        return this;
    }

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