// *** 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.aws.organizations.outputs;

import com.pulumi.aws.organizations.outputs.GetOrganizationAccount;
import com.pulumi.aws.organizations.outputs.GetOrganizationNonMasterAccount;
import com.pulumi.aws.organizations.outputs.GetOrganizationRoot;
import com.pulumi.core.annotations.CustomType;
import java.lang.String;
import java.util.List;
import java.util.Objects;

@CustomType
public final class GetOrganizationResult {
    /**
     * @return List of organization accounts including the master account. For a list excluding the master account, see the `non_master_accounts` attribute. All elements have these attributes:
     * 
     */
    private List<GetOrganizationAccount> accounts;
    /**
     * @return ARN of the root
     * 
     */
    private String arn;
    /**
     * @return A list of AWS service principal names that have integration enabled with your organization. Organization must have `feature_set` set to `ALL`. For additional information, see the [AWS Organizations User Guide](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html).
     * 
     */
    private List<String> awsServiceAccessPrincipals;
    /**
     * @return A list of Organizations policy types that are enabled in the Organization Root. Organization must have `feature_set` set to `ALL`. For additional information about valid policy types (e.g., `SERVICE_CONTROL_POLICY`), see the [AWS Organizations API Reference](https://docs.aws.amazon.com/organizations/latest/APIReference/API_EnablePolicyType.html).
     * 
     */
    private List<String> enabledPolicyTypes;
    /**
     * @return FeatureSet of the organization.
     * 
     */
    private String featureSet;
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    private String id;
    /**
     * @return ARN of the account that is designated as the master account for the organization.
     * 
     */
    private String masterAccountArn;
    /**
     * @return The email address that is associated with the AWS account that is designated as the master account for the organization.
     * 
     */
    private String masterAccountEmail;
    /**
     * @return Unique identifier (ID) of the master account of an organization.
     * 
     */
    private String masterAccountId;
    /**
     * @return List of organization accounts excluding the master account. For a list including the master account, see the `accounts` attribute. All elements have these attributes:
     * 
     */
    private List<GetOrganizationNonMasterAccount> nonMasterAccounts;
    /**
     * @return List of organization roots. All elements have these attributes:
     * 
     */
    private List<GetOrganizationRoot> roots;

    private GetOrganizationResult() {}
    /**
     * @return List of organization accounts including the master account. For a list excluding the master account, see the `non_master_accounts` attribute. All elements have these attributes:
     * 
     */
    public List<GetOrganizationAccount> accounts() {
        return this.accounts;
    }
    /**
     * @return ARN of the root
     * 
     */
    public String arn() {
        return this.arn;
    }
    /**
     * @return A list of AWS service principal names that have integration enabled with your organization. Organization must have `feature_set` set to `ALL`. For additional information, see the [AWS Organizations User Guide](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services.html).
     * 
     */
    public List<String> awsServiceAccessPrincipals() {
        return this.awsServiceAccessPrincipals;
    }
    /**
     * @return A list of Organizations policy types that are enabled in the Organization Root. Organization must have `feature_set` set to `ALL`. For additional information about valid policy types (e.g., `SERVICE_CONTROL_POLICY`), see the [AWS Organizations API Reference](https://docs.aws.amazon.com/organizations/latest/APIReference/API_EnablePolicyType.html).
     * 
     */
    public List<String> enabledPolicyTypes() {
        return this.enabledPolicyTypes;
    }
    /**
     * @return FeatureSet of the organization.
     * 
     */
    public String featureSet() {
        return this.featureSet;
    }
    /**
     * @return The provider-assigned unique ID for this managed resource.
     * 
     */
    public String id() {
        return this.id;
    }
    /**
     * @return ARN of the account that is designated as the master account for the organization.
     * 
     */
    public String masterAccountArn() {
        return this.masterAccountArn;
    }
    /**
     * @return The email address that is associated with the AWS account that is designated as the master account for the organization.
     * 
     */
    public String masterAccountEmail() {
        return this.masterAccountEmail;
    }
    /**
     * @return Unique identifier (ID) of the master account of an organization.
     * 
     */
    public String masterAccountId() {
        return this.masterAccountId;
    }
    /**
     * @return List of organization accounts excluding the master account. For a list including the master account, see the `accounts` attribute. All elements have these attributes:
     * 
     */
    public List<GetOrganizationNonMasterAccount> nonMasterAccounts() {
        return this.nonMasterAccounts;
    }
    /**
     * @return List of organization roots. All elements have these attributes:
     * 
     */
    public List<GetOrganizationRoot> roots() {
        return this.roots;
    }

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

    public static Builder builder(GetOrganizationResult defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private List<GetOrganizationAccount> accounts;
        private String arn;
        private List<String> awsServiceAccessPrincipals;
        private List<String> enabledPolicyTypes;
        private String featureSet;
        private String id;
        private String masterAccountArn;
        private String masterAccountEmail;
        private String masterAccountId;
        private List<GetOrganizationNonMasterAccount> nonMasterAccounts;
        private List<GetOrganizationRoot> roots;
        public Builder() {}
        public Builder(GetOrganizationResult defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.accounts = defaults.accounts;
    	      this.arn = defaults.arn;
    	      this.awsServiceAccessPrincipals = defaults.awsServiceAccessPrincipals;
    	      this.enabledPolicyTypes = defaults.enabledPolicyTypes;
    	      this.featureSet = defaults.featureSet;
    	      this.id = defaults.id;
    	      this.masterAccountArn = defaults.masterAccountArn;
    	      this.masterAccountEmail = defaults.masterAccountEmail;
    	      this.masterAccountId = defaults.masterAccountId;
    	      this.nonMasterAccounts = defaults.nonMasterAccounts;
    	      this.roots = defaults.roots;
        }

        @CustomType.Setter
        public Builder accounts(List<GetOrganizationAccount> accounts) {
            this.accounts = Objects.requireNonNull(accounts);
            return this;
        }
        public Builder accounts(GetOrganizationAccount... accounts) {
            return accounts(List.of(accounts));
        }
        @CustomType.Setter
        public Builder arn(String arn) {
            this.arn = Objects.requireNonNull(arn);
            return this;
        }
        @CustomType.Setter
        public Builder awsServiceAccessPrincipals(List<String> awsServiceAccessPrincipals) {
            this.awsServiceAccessPrincipals = Objects.requireNonNull(awsServiceAccessPrincipals);
            return this;
        }
        public Builder awsServiceAccessPrincipals(String... awsServiceAccessPrincipals) {
            return awsServiceAccessPrincipals(List.of(awsServiceAccessPrincipals));
        }
        @CustomType.Setter
        public Builder enabledPolicyTypes(List<String> enabledPolicyTypes) {
            this.enabledPolicyTypes = Objects.requireNonNull(enabledPolicyTypes);
            return this;
        }
        public Builder enabledPolicyTypes(String... enabledPolicyTypes) {
            return enabledPolicyTypes(List.of(enabledPolicyTypes));
        }
        @CustomType.Setter
        public Builder featureSet(String featureSet) {
            this.featureSet = Objects.requireNonNull(featureSet);
            return this;
        }
        @CustomType.Setter
        public Builder id(String id) {
            this.id = Objects.requireNonNull(id);
            return this;
        }
        @CustomType.Setter
        public Builder masterAccountArn(String masterAccountArn) {
            this.masterAccountArn = Objects.requireNonNull(masterAccountArn);
            return this;
        }
        @CustomType.Setter
        public Builder masterAccountEmail(String masterAccountEmail) {
            this.masterAccountEmail = Objects.requireNonNull(masterAccountEmail);
            return this;
        }
        @CustomType.Setter
        public Builder masterAccountId(String masterAccountId) {
            this.masterAccountId = Objects.requireNonNull(masterAccountId);
            return this;
        }
        @CustomType.Setter
        public Builder nonMasterAccounts(List<GetOrganizationNonMasterAccount> nonMasterAccounts) {
            this.nonMasterAccounts = Objects.requireNonNull(nonMasterAccounts);
            return this;
        }
        public Builder nonMasterAccounts(GetOrganizationNonMasterAccount... nonMasterAccounts) {
            return nonMasterAccounts(List.of(nonMasterAccounts));
        }
        @CustomType.Setter
        public Builder roots(List<GetOrganizationRoot> roots) {
            this.roots = Objects.requireNonNull(roots);
            return this;
        }
        public Builder roots(GetOrganizationRoot... roots) {
            return roots(List.of(roots));
        }
        public GetOrganizationResult build() {
            final var o = new GetOrganizationResult();
            o.accounts = accounts;
            o.arn = arn;
            o.awsServiceAccessPrincipals = awsServiceAccessPrincipals;
            o.enabledPolicyTypes = enabledPolicyTypes;
            o.featureSet = featureSet;
            o.id = id;
            o.masterAccountArn = masterAccountArn;
            o.masterAccountEmail = masterAccountEmail;
            o.masterAccountId = masterAccountId;
            o.nonMasterAccounts = nonMasterAccounts;
            o.roots = roots;
            return o;
        }
    }
}
