// *** 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.confidentialledger.inputs;

import com.pulumi.azure.confidentialledger.inputs.LedgerAzureadBasedServicePrincipalArgs;
import com.pulumi.azure.confidentialledger.inputs.LedgerCertificateBasedSecurityPrincipalArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final LedgerState Empty = new LedgerState();

    /**
     * A list of `azuread_based_service_principal` blocks as defined below.
     * 
     */
    @Import(name="azureadBasedServicePrincipals")
    private @Nullable Output<List<LedgerAzureadBasedServicePrincipalArgs>> azureadBasedServicePrincipals;

    /**
     * @return A list of `azuread_based_service_principal` blocks as defined below.
     * 
     */
    public Optional<Output<List<LedgerAzureadBasedServicePrincipalArgs>>> azureadBasedServicePrincipals() {
        return Optional.ofNullable(this.azureadBasedServicePrincipals);
    }

    /**
     * A list of `certificate_based_security_principal` blocks as defined below.
     * 
     */
    @Import(name="certificateBasedSecurityPrincipals")
    private @Nullable Output<List<LedgerCertificateBasedSecurityPrincipalArgs>> certificateBasedSecurityPrincipals;

    /**
     * @return A list of `certificate_based_security_principal` blocks as defined below.
     * 
     */
    public Optional<Output<List<LedgerCertificateBasedSecurityPrincipalArgs>>> certificateBasedSecurityPrincipals() {
        return Optional.ofNullable(this.certificateBasedSecurityPrincipals);
    }

    /**
     * The Identity Service Endpoint for this Confidential Ledger.
     * 
     */
    @Import(name="identityServiceEndpoint")
    private @Nullable Output<String> identityServiceEndpoint;

    /**
     * @return The Identity Service Endpoint for this Confidential Ledger.
     * 
     */
    public Optional<Output<String>> identityServiceEndpoint() {
        return Optional.ofNullable(this.identityServiceEndpoint);
    }

    /**
     * The Endpoint for this Confidential Ledger.
     * 
     */
    @Import(name="ledgerEndpoint")
    private @Nullable Output<String> ledgerEndpoint;

    /**
     * @return The Endpoint for this Confidential Ledger.
     * 
     */
    public Optional<Output<String>> ledgerEndpoint() {
        return Optional.ofNullable(this.ledgerEndpoint);
    }

    /**
     * Specifies the type of Confidential Ledger. Possible values are `Private` and `Public`. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="ledgerType")
    private @Nullable Output<String> ledgerType;

    /**
     * @return Specifies the type of Confidential Ledger. Possible values are `Private` and `Public`. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> ledgerType() {
        return Optional.ofNullable(this.ledgerType);
    }

    /**
     * Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

    /**
     * @return Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="resourceGroupName")
    private @Nullable Output<String> resourceGroupName;

    /**
     * @return The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
     * 
     */
    public Optional<Output<String>> resourceGroupName() {
        return Optional.ofNullable(this.resourceGroupName);
    }

    /**
     * A mapping of tags to assign to the Confidential Ledger.
     * 
     */
    @Import(name="tags")
    private @Nullable Output<Map<String,String>> tags;

    /**
     * @return A mapping of tags to assign to the Confidential Ledger.
     * 
     */
    public Optional<Output<Map<String,String>>> tags() {
        return Optional.ofNullable(this.tags);
    }

    private LedgerState() {}

    private LedgerState(LedgerState $) {
        this.azureadBasedServicePrincipals = $.azureadBasedServicePrincipals;
        this.certificateBasedSecurityPrincipals = $.certificateBasedSecurityPrincipals;
        this.identityServiceEndpoint = $.identityServiceEndpoint;
        this.ledgerEndpoint = $.ledgerEndpoint;
        this.ledgerType = $.ledgerType;
        this.location = $.location;
        this.name = $.name;
        this.resourceGroupName = $.resourceGroupName;
        this.tags = $.tags;
    }

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

    public static final class Builder {
        private LedgerState $;

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

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

        /**
         * @param azureadBasedServicePrincipals A list of `azuread_based_service_principal` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder azureadBasedServicePrincipals(@Nullable Output<List<LedgerAzureadBasedServicePrincipalArgs>> azureadBasedServicePrincipals) {
            $.azureadBasedServicePrincipals = azureadBasedServicePrincipals;
            return this;
        }

        /**
         * @param azureadBasedServicePrincipals A list of `azuread_based_service_principal` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder azureadBasedServicePrincipals(List<LedgerAzureadBasedServicePrincipalArgs> azureadBasedServicePrincipals) {
            return azureadBasedServicePrincipals(Output.of(azureadBasedServicePrincipals));
        }

        /**
         * @param azureadBasedServicePrincipals A list of `azuread_based_service_principal` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder azureadBasedServicePrincipals(LedgerAzureadBasedServicePrincipalArgs... azureadBasedServicePrincipals) {
            return azureadBasedServicePrincipals(List.of(azureadBasedServicePrincipals));
        }

        /**
         * @param certificateBasedSecurityPrincipals A list of `certificate_based_security_principal` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder certificateBasedSecurityPrincipals(@Nullable Output<List<LedgerCertificateBasedSecurityPrincipalArgs>> certificateBasedSecurityPrincipals) {
            $.certificateBasedSecurityPrincipals = certificateBasedSecurityPrincipals;
            return this;
        }

        /**
         * @param certificateBasedSecurityPrincipals A list of `certificate_based_security_principal` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder certificateBasedSecurityPrincipals(List<LedgerCertificateBasedSecurityPrincipalArgs> certificateBasedSecurityPrincipals) {
            return certificateBasedSecurityPrincipals(Output.of(certificateBasedSecurityPrincipals));
        }

        /**
         * @param certificateBasedSecurityPrincipals A list of `certificate_based_security_principal` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder certificateBasedSecurityPrincipals(LedgerCertificateBasedSecurityPrincipalArgs... certificateBasedSecurityPrincipals) {
            return certificateBasedSecurityPrincipals(List.of(certificateBasedSecurityPrincipals));
        }

        /**
         * @param identityServiceEndpoint The Identity Service Endpoint for this Confidential Ledger.
         * 
         * @return builder
         * 
         */
        public Builder identityServiceEndpoint(@Nullable Output<String> identityServiceEndpoint) {
            $.identityServiceEndpoint = identityServiceEndpoint;
            return this;
        }

        /**
         * @param identityServiceEndpoint The Identity Service Endpoint for this Confidential Ledger.
         * 
         * @return builder
         * 
         */
        public Builder identityServiceEndpoint(String identityServiceEndpoint) {
            return identityServiceEndpoint(Output.of(identityServiceEndpoint));
        }

        /**
         * @param ledgerEndpoint The Endpoint for this Confidential Ledger.
         * 
         * @return builder
         * 
         */
        public Builder ledgerEndpoint(@Nullable Output<String> ledgerEndpoint) {
            $.ledgerEndpoint = ledgerEndpoint;
            return this;
        }

        /**
         * @param ledgerEndpoint The Endpoint for this Confidential Ledger.
         * 
         * @return builder
         * 
         */
        public Builder ledgerEndpoint(String ledgerEndpoint) {
            return ledgerEndpoint(Output.of(ledgerEndpoint));
        }

        /**
         * @param ledgerType Specifies the type of Confidential Ledger. Possible values are `Private` and `Public`. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder ledgerType(@Nullable Output<String> ledgerType) {
            $.ledgerType = ledgerType;
            return this;
        }

        /**
         * @param ledgerType Specifies the type of Confidential Ledger. Possible values are `Private` and `Public`. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder ledgerType(String ledgerType) {
            return ledgerType(Output.of(ledgerType));
        }

        /**
         * @param location Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location Specifies the supported Azure location where the Confidential Ledger exists. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param name Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name Specifies the name of the Confidential Ledger. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param resourceGroupName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(@Nullable Output<String> resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param resourceGroupName The name of the Resource Group where the Confidential Ledger exists. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param tags A mapping of tags to assign to the Confidential Ledger.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output<Map<String,String>> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags to assign to the Confidential Ledger.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        public LedgerState build() {
            return $;
        }
    }

}
