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

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gcp.certificatemanager.inputs.CertificateManagedAuthorizationAttemptInfoArgs;
import com.pulumi.gcp.certificatemanager.inputs.CertificateManagedProvisioningIssueArgs;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final CertificateManagedArgs Empty = new CertificateManagedArgs();

    /**
     * (Output)
     * Detailed state of the latest authorization attempt for each domain
     * specified for this Managed Certificate.
     * Structure is documented below.
     * 
     * &lt;a name=&#34;nested_provisioning_issue&#34;&gt;&lt;/a&gt;The `provisioning_issue` block contains:
     * 
     */
    @Import(name="authorizationAttemptInfos")
    private @Nullable Output<List<CertificateManagedAuthorizationAttemptInfoArgs>> authorizationAttemptInfos;

    /**
     * @return (Output)
     * Detailed state of the latest authorization attempt for each domain
     * specified for this Managed Certificate.
     * Structure is documented below.
     * 
     * &lt;a name=&#34;nested_provisioning_issue&#34;&gt;&lt;/a&gt;The `provisioning_issue` block contains:
     * 
     */
    public Optional<Output<List<CertificateManagedAuthorizationAttemptInfoArgs>>> authorizationAttemptInfos() {
        return Optional.ofNullable(this.authorizationAttemptInfos);
    }

    /**
     * Authorizations that will be used for performing domain authorization. Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
     * 
     */
    @Import(name="dnsAuthorizations")
    private @Nullable Output<List<String>> dnsAuthorizations;

    /**
     * @return Authorizations that will be used for performing domain authorization. Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
     * 
     */
    public Optional<Output<List<String>>> dnsAuthorizations() {
        return Optional.ofNullable(this.dnsAuthorizations);
    }

    /**
     * The domains for which a managed SSL certificate will be generated.
     * Wildcard domains are only supported with DNS challenge resolution
     * 
     */
    @Import(name="domains")
    private @Nullable Output<List<String>> domains;

    /**
     * @return The domains for which a managed SSL certificate will be generated.
     * Wildcard domains are only supported with DNS challenge resolution
     * 
     */
    public Optional<Output<List<String>>> domains() {
        return Optional.ofNullable(this.domains);
    }

    /**
     * The resource name for a CertificateIssuanceConfig used to configure private PKI certificates in the format projects/*{@literal /}locations/*{@literal /}certificateIssuanceConfigs/*.
     * If this field is not set, the certificates will instead be publicly signed as documented at https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa.
     * Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
     * 
     */
    @Import(name="issuanceConfig")
    private @Nullable Output<String> issuanceConfig;

    /**
     * @return The resource name for a CertificateIssuanceConfig used to configure private PKI certificates in the format projects/*{@literal /}locations/*{@literal /}certificateIssuanceConfigs/*.
     * If this field is not set, the certificates will instead be publicly signed as documented at https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa.
     * Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
     * 
     */
    public Optional<Output<String>> issuanceConfig() {
        return Optional.ofNullable(this.issuanceConfig);
    }

    /**
     * (Output)
     * Information about issues with provisioning this Managed Certificate.
     * Structure is documented below.
     * 
     */
    @Import(name="provisioningIssues")
    private @Nullable Output<List<CertificateManagedProvisioningIssueArgs>> provisioningIssues;

    /**
     * @return (Output)
     * Information about issues with provisioning this Managed Certificate.
     * Structure is documented below.
     * 
     */
    public Optional<Output<List<CertificateManagedProvisioningIssueArgs>>> provisioningIssues() {
        return Optional.ofNullable(this.provisioningIssues);
    }

    /**
     * (Output)
     * State of the domain for managed certificate issuance.
     * 
     */
    @Import(name="state")
    private @Nullable Output<String> state;

    /**
     * @return (Output)
     * State of the domain for managed certificate issuance.
     * 
     */
    public Optional<Output<String>> state() {
        return Optional.ofNullable(this.state);
    }

    private CertificateManagedArgs() {}

    private CertificateManagedArgs(CertificateManagedArgs $) {
        this.authorizationAttemptInfos = $.authorizationAttemptInfos;
        this.dnsAuthorizations = $.dnsAuthorizations;
        this.domains = $.domains;
        this.issuanceConfig = $.issuanceConfig;
        this.provisioningIssues = $.provisioningIssues;
        this.state = $.state;
    }

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

    public static final class Builder {
        private CertificateManagedArgs $;

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

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

        /**
         * @param authorizationAttemptInfos (Output)
         * Detailed state of the latest authorization attempt for each domain
         * specified for this Managed Certificate.
         * Structure is documented below.
         * 
         * &lt;a name=&#34;nested_provisioning_issue&#34;&gt;&lt;/a&gt;The `provisioning_issue` block contains:
         * 
         * @return builder
         * 
         */
        public Builder authorizationAttemptInfos(@Nullable Output<List<CertificateManagedAuthorizationAttemptInfoArgs>> authorizationAttemptInfos) {
            $.authorizationAttemptInfos = authorizationAttemptInfos;
            return this;
        }

        /**
         * @param authorizationAttemptInfos (Output)
         * Detailed state of the latest authorization attempt for each domain
         * specified for this Managed Certificate.
         * Structure is documented below.
         * 
         * &lt;a name=&#34;nested_provisioning_issue&#34;&gt;&lt;/a&gt;The `provisioning_issue` block contains:
         * 
         * @return builder
         * 
         */
        public Builder authorizationAttemptInfos(List<CertificateManagedAuthorizationAttemptInfoArgs> authorizationAttemptInfos) {
            return authorizationAttemptInfos(Output.of(authorizationAttemptInfos));
        }

        /**
         * @param authorizationAttemptInfos (Output)
         * Detailed state of the latest authorization attempt for each domain
         * specified for this Managed Certificate.
         * Structure is documented below.
         * 
         * &lt;a name=&#34;nested_provisioning_issue&#34;&gt;&lt;/a&gt;The `provisioning_issue` block contains:
         * 
         * @return builder
         * 
         */
        public Builder authorizationAttemptInfos(CertificateManagedAuthorizationAttemptInfoArgs... authorizationAttemptInfos) {
            return authorizationAttemptInfos(List.of(authorizationAttemptInfos));
        }

        /**
         * @param dnsAuthorizations Authorizations that will be used for performing domain authorization. Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
         * 
         * @return builder
         * 
         */
        public Builder dnsAuthorizations(@Nullable Output<List<String>> dnsAuthorizations) {
            $.dnsAuthorizations = dnsAuthorizations;
            return this;
        }

        /**
         * @param dnsAuthorizations Authorizations that will be used for performing domain authorization. Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
         * 
         * @return builder
         * 
         */
        public Builder dnsAuthorizations(List<String> dnsAuthorizations) {
            return dnsAuthorizations(Output.of(dnsAuthorizations));
        }

        /**
         * @param dnsAuthorizations Authorizations that will be used for performing domain authorization. Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
         * 
         * @return builder
         * 
         */
        public Builder dnsAuthorizations(String... dnsAuthorizations) {
            return dnsAuthorizations(List.of(dnsAuthorizations));
        }

        /**
         * @param domains The domains for which a managed SSL certificate will be generated.
         * Wildcard domains are only supported with DNS challenge resolution
         * 
         * @return builder
         * 
         */
        public Builder domains(@Nullable Output<List<String>> domains) {
            $.domains = domains;
            return this;
        }

        /**
         * @param domains The domains for which a managed SSL certificate will be generated.
         * Wildcard domains are only supported with DNS challenge resolution
         * 
         * @return builder
         * 
         */
        public Builder domains(List<String> domains) {
            return domains(Output.of(domains));
        }

        /**
         * @param domains The domains for which a managed SSL certificate will be generated.
         * Wildcard domains are only supported with DNS challenge resolution
         * 
         * @return builder
         * 
         */
        public Builder domains(String... domains) {
            return domains(List.of(domains));
        }

        /**
         * @param issuanceConfig The resource name for a CertificateIssuanceConfig used to configure private PKI certificates in the format projects/*{@literal /}locations/*{@literal /}certificateIssuanceConfigs/*.
         * If this field is not set, the certificates will instead be publicly signed as documented at https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa.
         * Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
         * 
         * @return builder
         * 
         */
        public Builder issuanceConfig(@Nullable Output<String> issuanceConfig) {
            $.issuanceConfig = issuanceConfig;
            return this;
        }

        /**
         * @param issuanceConfig The resource name for a CertificateIssuanceConfig used to configure private PKI certificates in the format projects/*{@literal /}locations/*{@literal /}certificateIssuanceConfigs/*.
         * If this field is not set, the certificates will instead be publicly signed as documented at https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa.
         * Either issuanceConfig or dnsAuthorizations should be specificed, but not both.
         * 
         * @return builder
         * 
         */
        public Builder issuanceConfig(String issuanceConfig) {
            return issuanceConfig(Output.of(issuanceConfig));
        }

        /**
         * @param provisioningIssues (Output)
         * Information about issues with provisioning this Managed Certificate.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder provisioningIssues(@Nullable Output<List<CertificateManagedProvisioningIssueArgs>> provisioningIssues) {
            $.provisioningIssues = provisioningIssues;
            return this;
        }

        /**
         * @param provisioningIssues (Output)
         * Information about issues with provisioning this Managed Certificate.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder provisioningIssues(List<CertificateManagedProvisioningIssueArgs> provisioningIssues) {
            return provisioningIssues(Output.of(provisioningIssues));
        }

        /**
         * @param provisioningIssues (Output)
         * Information about issues with provisioning this Managed Certificate.
         * Structure is documented below.
         * 
         * @return builder
         * 
         */
        public Builder provisioningIssues(CertificateManagedProvisioningIssueArgs... provisioningIssues) {
            return provisioningIssues(List.of(provisioningIssues));
        }

        /**
         * @param state (Output)
         * State of the domain for managed certificate issuance.
         * 
         * @return builder
         * 
         */
        public Builder state(@Nullable Output<String> state) {
            $.state = state;
            return this;
        }

        /**
         * @param state (Output)
         * State of the domain for managed certificate issuance.
         * 
         * @return builder
         * 
         */
        public Builder state(String state) {
            return state(Output.of(state));
        }

        public CertificateManagedArgs build() {
            return $;
        }
    }

}
