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

import com.pulumi.azure.healthcare.inputs.FhirServiceAuthenticationArgs;
import com.pulumi.azure.healthcare.inputs.FhirServiceCorsArgs;
import com.pulumi.azure.healthcare.inputs.FhirServiceIdentityArgs;
import com.pulumi.azure.healthcare.inputs.FhirServiceOciArtifactArgs;
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 FhirServiceArgs extends com.pulumi.resources.ResourceArgs {

    public static final FhirServiceArgs Empty = new FhirServiceArgs();

    /**
     * A list of the access policies of the service instance.
     * 
     */
    @Import(name="accessPolicyObjectIds")
    private @Nullable Output<List<String>> accessPolicyObjectIds;

    /**
     * @return A list of the access policies of the service instance.
     * 
     */
    public Optional<Output<List<String>>> accessPolicyObjectIds() {
        return Optional.ofNullable(this.accessPolicyObjectIds);
    }

    /**
     * An `authentication` block as defined below.
     * 
     */
    @Import(name="authentication", required=true)
    private Output<FhirServiceAuthenticationArgs> authentication;

    /**
     * @return An `authentication` block as defined below.
     * 
     */
    public Output<FhirServiceAuthenticationArgs> authentication() {
        return this.authentication;
    }

    /**
     * Specifies the name of the storage account which the operation configuration information is exported to.
     * 
     */
    @Import(name="configurationExportStorageAccountName")
    private @Nullable Output<String> configurationExportStorageAccountName;

    /**
     * @return Specifies the name of the storage account which the operation configuration information is exported to.
     * 
     */
    public Optional<Output<String>> configurationExportStorageAccountName() {
        return Optional.ofNullable(this.configurationExportStorageAccountName);
    }

    /**
     * A list of azure container registry settings used for convert data operation of the service instance.
     * 
     */
    @Import(name="containerRegistryLoginServerUrls")
    private @Nullable Output<List<String>> containerRegistryLoginServerUrls;

    /**
     * @return A list of azure container registry settings used for convert data operation of the service instance.
     * 
     */
    public Optional<Output<List<String>>> containerRegistryLoginServerUrls() {
        return Optional.ofNullable(this.containerRegistryLoginServerUrls);
    }

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

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

    /**
     * An `identity` block as defined below.
     * 
     */
    @Import(name="identity")
    private @Nullable Output<FhirServiceIdentityArgs> identity;

    /**
     * @return An `identity` block as defined below.
     * 
     */
    public Optional<Output<FhirServiceIdentityArgs>> identity() {
        return Optional.ofNullable(this.identity);
    }

    /**
     * Specifies the kind of the Healthcare FHIR Service. Possible values are: `fhir-Stu3` and `fhir-R4`. Defaults to `fhir-R4`. Changing this forces a new Healthcare FHIR Service to be created.
     * 
     */
    @Import(name="kind")
    private @Nullable Output<String> kind;

    /**
     * @return Specifies the kind of the Healthcare FHIR Service. Possible values are: `fhir-Stu3` and `fhir-R4`. Defaults to `fhir-R4`. Changing this forces a new Healthcare FHIR Service to be created.
     * 
     */
    public Optional<Output<String>> kind() {
        return Optional.ofNullable(this.kind);
    }

    /**
     * Specifies the Azure Region where the Healthcare FHIR Service should be created. Changing this forces a new Healthcare FHIR Service to be created.
     * 
     */
    @Import(name="location")
    private @Nullable Output<String> location;

    /**
     * @return Specifies the Azure Region where the Healthcare FHIR Service should be created. Changing this forces a new Healthcare FHIR Service to be created.
     * 
     */
    public Optional<Output<String>> location() {
        return Optional.ofNullable(this.location);
    }

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

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

    /**
     * [A list](https://www.terraform.io/docs/configuration/attr-as-blocks.html) of objects describing [OCI artifacts for export](https://learn.microsoft.com/en-gb/azure/healthcare-apis/fhir/de-identified-export) as defined below.
     * 
     */
    @Import(name="ociArtifacts")
    private @Nullable Output<List<FhirServiceOciArtifactArgs>> ociArtifacts;

    /**
     * @return [A list](https://www.terraform.io/docs/configuration/attr-as-blocks.html) of objects describing [OCI artifacts for export](https://learn.microsoft.com/en-gb/azure/healthcare-apis/fhir/de-identified-export) as defined below.
     * 
     */
    public Optional<Output<List<FhirServiceOciArtifactArgs>>> ociArtifacts() {
        return Optional.ofNullable(this.ociArtifacts);
    }

    /**
     * Specifies the name of the Resource Group in which to create the Healthcare FHIR Service. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="resourceGroupName", required=true)
    private Output<String> resourceGroupName;

    /**
     * @return Specifies the name of the Resource Group in which to create the Healthcare FHIR Service. Changing this forces a new resource to be created.
     * 
     */
    public Output<String> resourceGroupName() {
        return this.resourceGroupName;
    }

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

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

    /**
     * Specifies the id of the Healthcare Workspace where the Healthcare FHIR Service should exist. Changing this forces a new Healthcare FHIR Service to be created.
     * 
     */
    @Import(name="workspaceId", required=true)
    private Output<String> workspaceId;

    /**
     * @return Specifies the id of the Healthcare Workspace where the Healthcare FHIR Service should exist. Changing this forces a new Healthcare FHIR Service to be created.
     * 
     */
    public Output<String> workspaceId() {
        return this.workspaceId;
    }

    private FhirServiceArgs() {}

    private FhirServiceArgs(FhirServiceArgs $) {
        this.accessPolicyObjectIds = $.accessPolicyObjectIds;
        this.authentication = $.authentication;
        this.configurationExportStorageAccountName = $.configurationExportStorageAccountName;
        this.containerRegistryLoginServerUrls = $.containerRegistryLoginServerUrls;
        this.cors = $.cors;
        this.identity = $.identity;
        this.kind = $.kind;
        this.location = $.location;
        this.name = $.name;
        this.ociArtifacts = $.ociArtifacts;
        this.resourceGroupName = $.resourceGroupName;
        this.tags = $.tags;
        this.workspaceId = $.workspaceId;
    }

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

    public static final class Builder {
        private FhirServiceArgs $;

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

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

        /**
         * @param accessPolicyObjectIds A list of the access policies of the service instance.
         * 
         * @return builder
         * 
         */
        public Builder accessPolicyObjectIds(@Nullable Output<List<String>> accessPolicyObjectIds) {
            $.accessPolicyObjectIds = accessPolicyObjectIds;
            return this;
        }

        /**
         * @param accessPolicyObjectIds A list of the access policies of the service instance.
         * 
         * @return builder
         * 
         */
        public Builder accessPolicyObjectIds(List<String> accessPolicyObjectIds) {
            return accessPolicyObjectIds(Output.of(accessPolicyObjectIds));
        }

        /**
         * @param accessPolicyObjectIds A list of the access policies of the service instance.
         * 
         * @return builder
         * 
         */
        public Builder accessPolicyObjectIds(String... accessPolicyObjectIds) {
            return accessPolicyObjectIds(List.of(accessPolicyObjectIds));
        }

        /**
         * @param authentication An `authentication` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authentication(Output<FhirServiceAuthenticationArgs> authentication) {
            $.authentication = authentication;
            return this;
        }

        /**
         * @param authentication An `authentication` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder authentication(FhirServiceAuthenticationArgs authentication) {
            return authentication(Output.of(authentication));
        }

        /**
         * @param configurationExportStorageAccountName Specifies the name of the storage account which the operation configuration information is exported to.
         * 
         * @return builder
         * 
         */
        public Builder configurationExportStorageAccountName(@Nullable Output<String> configurationExportStorageAccountName) {
            $.configurationExportStorageAccountName = configurationExportStorageAccountName;
            return this;
        }

        /**
         * @param configurationExportStorageAccountName Specifies the name of the storage account which the operation configuration information is exported to.
         * 
         * @return builder
         * 
         */
        public Builder configurationExportStorageAccountName(String configurationExportStorageAccountName) {
            return configurationExportStorageAccountName(Output.of(configurationExportStorageAccountName));
        }

        /**
         * @param containerRegistryLoginServerUrls A list of azure container registry settings used for convert data operation of the service instance.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistryLoginServerUrls(@Nullable Output<List<String>> containerRegistryLoginServerUrls) {
            $.containerRegistryLoginServerUrls = containerRegistryLoginServerUrls;
            return this;
        }

        /**
         * @param containerRegistryLoginServerUrls A list of azure container registry settings used for convert data operation of the service instance.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistryLoginServerUrls(List<String> containerRegistryLoginServerUrls) {
            return containerRegistryLoginServerUrls(Output.of(containerRegistryLoginServerUrls));
        }

        /**
         * @param containerRegistryLoginServerUrls A list of azure container registry settings used for convert data operation of the service instance.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistryLoginServerUrls(String... containerRegistryLoginServerUrls) {
            return containerRegistryLoginServerUrls(List.of(containerRegistryLoginServerUrls));
        }

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

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

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(@Nullable Output<FhirServiceIdentityArgs> identity) {
            $.identity = identity;
            return this;
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(FhirServiceIdentityArgs identity) {
            return identity(Output.of(identity));
        }

        /**
         * @param kind Specifies the kind of the Healthcare FHIR Service. Possible values are: `fhir-Stu3` and `fhir-R4`. Defaults to `fhir-R4`. Changing this forces a new Healthcare FHIR Service to be created.
         * 
         * @return builder
         * 
         */
        public Builder kind(@Nullable Output<String> kind) {
            $.kind = kind;
            return this;
        }

        /**
         * @param kind Specifies the kind of the Healthcare FHIR Service. Possible values are: `fhir-Stu3` and `fhir-R4`. Defaults to `fhir-R4`. Changing this forces a new Healthcare FHIR Service to be created.
         * 
         * @return builder
         * 
         */
        public Builder kind(String kind) {
            return kind(Output.of(kind));
        }

        /**
         * @param location Specifies the Azure Region where the Healthcare FHIR Service should be created. Changing this forces a new Healthcare FHIR Service to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output<String> location) {
            $.location = location;
            return this;
        }

        /**
         * @param location Specifies the Azure Region where the Healthcare FHIR Service should be created. Changing this forces a new Healthcare FHIR Service to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

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

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

        /**
         * @param ociArtifacts [A list](https://www.terraform.io/docs/configuration/attr-as-blocks.html) of objects describing [OCI artifacts for export](https://learn.microsoft.com/en-gb/azure/healthcare-apis/fhir/de-identified-export) as defined below.
         * 
         * @return builder
         * 
         */
        public Builder ociArtifacts(@Nullable Output<List<FhirServiceOciArtifactArgs>> ociArtifacts) {
            $.ociArtifacts = ociArtifacts;
            return this;
        }

        /**
         * @param ociArtifacts [A list](https://www.terraform.io/docs/configuration/attr-as-blocks.html) of objects describing [OCI artifacts for export](https://learn.microsoft.com/en-gb/azure/healthcare-apis/fhir/de-identified-export) as defined below.
         * 
         * @return builder
         * 
         */
        public Builder ociArtifacts(List<FhirServiceOciArtifactArgs> ociArtifacts) {
            return ociArtifacts(Output.of(ociArtifacts));
        }

        /**
         * @param ociArtifacts [A list](https://www.terraform.io/docs/configuration/attr-as-blocks.html) of objects describing [OCI artifacts for export](https://learn.microsoft.com/en-gb/azure/healthcare-apis/fhir/de-identified-export) as defined below.
         * 
         * @return builder
         * 
         */
        public Builder ociArtifacts(FhirServiceOciArtifactArgs... ociArtifacts) {
            return ociArtifacts(List.of(ociArtifacts));
        }

        /**
         * @param resourceGroupName Specifies the name of the Resource Group in which to create the Healthcare FHIR Service. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(Output<String> resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param resourceGroupName Specifies the name of the Resource Group in which to create the Healthcare FHIR Service. 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 Healthcare FHIR Service.
         * 
         * @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 Healthcare FHIR Service.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map<String,String> tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param workspaceId Specifies the id of the Healthcare Workspace where the Healthcare FHIR Service should exist. Changing this forces a new Healthcare FHIR Service to be created.
         * 
         * @return builder
         * 
         */
        public Builder workspaceId(Output<String> workspaceId) {
            $.workspaceId = workspaceId;
            return this;
        }

        /**
         * @param workspaceId Specifies the id of the Healthcare Workspace where the Healthcare FHIR Service should exist. Changing this forces a new Healthcare FHIR Service to be created.
         * 
         * @return builder
         * 
         */
        public Builder workspaceId(String workspaceId) {
            return workspaceId(Output.of(workspaceId));
        }

        public FhirServiceArgs build() {
            $.authentication = Objects.requireNonNull($.authentication, "expected parameter 'authentication' to be non-null");
            $.resourceGroupName = Objects.requireNonNull($.resourceGroupName, "expected parameter 'resourceGroupName' to be non-null");
            $.workspaceId = Objects.requireNonNull($.workspaceId, "expected parameter 'workspaceId' to be non-null");
            return $;
        }
    }

}
