// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.media.inputs;

import com.pulumi.azure.media.inputs.ServiceAccountEncryptionManagedIdentityArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ServiceAccountEncryptionArgs extends com.pulumi.resources.ResourceArgs {

    public static final ServiceAccountEncryptionArgs Empty = new ServiceAccountEncryptionArgs();

    /**
     * The current key used to encrypt the Media Services Account, including the key version.
     * 
     */
    @Import(name="currentKeyIdentifier")
    private @Nullable Output<String> currentKeyIdentifier;

    /**
     * @return The current key used to encrypt the Media Services Account, including the key version.
     * 
     */
    public Optional<Output<String>> currentKeyIdentifier() {
        return Optional.ofNullable(this.currentKeyIdentifier);
    }

    /**
     * Specifies the URI of the Key Vault Key used to encrypt data. The key may either be versioned (for example https://vault/keys/mykey/version1) or reference a key without a version (for example https://vault/keys/mykey).
     * 
     */
    @Import(name="keyVaultKeyIdentifier")
    private @Nullable Output<String> keyVaultKeyIdentifier;

    /**
     * @return Specifies the URI of the Key Vault Key used to encrypt data. The key may either be versioned (for example https://vault/keys/mykey/version1) or reference a key without a version (for example https://vault/keys/mykey).
     * 
     */
    public Optional<Output<String>> keyVaultKeyIdentifier() {
        return Optional.ofNullable(this.keyVaultKeyIdentifier);
    }

    /**
     * A `managed_identity` block as defined below.
     * 
     */
    @Import(name="managedIdentity")
    private @Nullable Output<ServiceAccountEncryptionManagedIdentityArgs> managedIdentity;

    /**
     * @return A `managed_identity` block as defined below.
     * 
     */
    public Optional<Output<ServiceAccountEncryptionManagedIdentityArgs>> managedIdentity() {
        return Optional.ofNullable(this.managedIdentity);
    }

    /**
     * Specifies the type of key used to encrypt the account data. Possible values are `SystemKey` and `CustomerKey`.
     * 
     */
    @Import(name="type")
    private @Nullable Output<String> type;

    /**
     * @return Specifies the type of key used to encrypt the account data. Possible values are `SystemKey` and `CustomerKey`.
     * 
     */
    public Optional<Output<String>> type() {
        return Optional.ofNullable(this.type);
    }

    private ServiceAccountEncryptionArgs() {}

    private ServiceAccountEncryptionArgs(ServiceAccountEncryptionArgs $) {
        this.currentKeyIdentifier = $.currentKeyIdentifier;
        this.keyVaultKeyIdentifier = $.keyVaultKeyIdentifier;
        this.managedIdentity = $.managedIdentity;
        this.type = $.type;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(ServiceAccountEncryptionArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private ServiceAccountEncryptionArgs $;

        public Builder() {
            $ = new ServiceAccountEncryptionArgs();
        }

        public Builder(ServiceAccountEncryptionArgs defaults) {
            $ = new ServiceAccountEncryptionArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param currentKeyIdentifier The current key used to encrypt the Media Services Account, including the key version.
         * 
         * @return builder
         * 
         */
        public Builder currentKeyIdentifier(@Nullable Output<String> currentKeyIdentifier) {
            $.currentKeyIdentifier = currentKeyIdentifier;
            return this;
        }

        /**
         * @param currentKeyIdentifier The current key used to encrypt the Media Services Account, including the key version.
         * 
         * @return builder
         * 
         */
        public Builder currentKeyIdentifier(String currentKeyIdentifier) {
            return currentKeyIdentifier(Output.of(currentKeyIdentifier));
        }

        /**
         * @param keyVaultKeyIdentifier Specifies the URI of the Key Vault Key used to encrypt data. The key may either be versioned (for example https://vault/keys/mykey/version1) or reference a key without a version (for example https://vault/keys/mykey).
         * 
         * @return builder
         * 
         */
        public Builder keyVaultKeyIdentifier(@Nullable Output<String> keyVaultKeyIdentifier) {
            $.keyVaultKeyIdentifier = keyVaultKeyIdentifier;
            return this;
        }

        /**
         * @param keyVaultKeyIdentifier Specifies the URI of the Key Vault Key used to encrypt data. The key may either be versioned (for example https://vault/keys/mykey/version1) or reference a key without a version (for example https://vault/keys/mykey).
         * 
         * @return builder
         * 
         */
        public Builder keyVaultKeyIdentifier(String keyVaultKeyIdentifier) {
            return keyVaultKeyIdentifier(Output.of(keyVaultKeyIdentifier));
        }

        /**
         * @param managedIdentity A `managed_identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder managedIdentity(@Nullable Output<ServiceAccountEncryptionManagedIdentityArgs> managedIdentity) {
            $.managedIdentity = managedIdentity;
            return this;
        }

        /**
         * @param managedIdentity A `managed_identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder managedIdentity(ServiceAccountEncryptionManagedIdentityArgs managedIdentity) {
            return managedIdentity(Output.of(managedIdentity));
        }

        /**
         * @param type Specifies the type of key used to encrypt the account data. Possible values are `SystemKey` and `CustomerKey`.
         * 
         * @return builder
         * 
         */
        public Builder type(@Nullable Output<String> type) {
            $.type = type;
            return this;
        }

        /**
         * @param type Specifies the type of key used to encrypt the account data. Possible values are `SystemKey` and `CustomerKey`.
         * 
         * @return builder
         * 
         */
        public Builder type(String type) {
            return type(Output.of(type));
        }

        public ServiceAccountEncryptionArgs build() {
            return $;
        }
    }

}
