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

import com.pulumi.azure.sentinel.inputs.MetadataAuthorArgs;
import com.pulumi.azure.sentinel.inputs.MetadataCategoryArgs;
import com.pulumi.azure.sentinel.inputs.MetadataSourceArgs;
import com.pulumi.azure.sentinel.inputs.MetadataSupportArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


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

    public static final MetadataArgs Empty = new MetadataArgs();

    /**
     * An `author` blocks as defined below.
     * 
     */
    @Import(name="author")
    private @Nullable Output<MetadataAuthorArgs> author;

    /**
     * @return An `author` blocks as defined below.
     * 
     */
    public Optional<Output<MetadataAuthorArgs>> author() {
        return Optional.ofNullable(this.author);
    }

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

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

    /**
     * The ID of the content. Used to identify dependencies and content from solutions or community.
     * 
     */
    @Import(name="contentId", required=true)
    private Output<String> contentId;

    /**
     * @return The ID of the content. Used to identify dependencies and content from solutions or community.
     * 
     */
    public Output<String> contentId() {
        return this.contentId;
    }

    /**
     * Schema version of the content. Can be used to distinguish between flow based on the schema version.
     * 
     */
    @Import(name="contentSchemaVersion")
    private @Nullable Output<String> contentSchemaVersion;

    /**
     * @return Schema version of the content. Can be used to distinguish between flow based on the schema version.
     * 
     */
    public Optional<Output<String>> contentSchemaVersion() {
        return Optional.ofNullable(this.contentSchemaVersion);
    }

    /**
     * The Custom version of the content.
     * 
     */
    @Import(name="customVersion")
    private @Nullable Output<String> customVersion;

    /**
     * @return The Custom version of the content.
     * 
     */
    public Optional<Output<String>> customVersion() {
        return Optional.ofNullable(this.customVersion);
    }

    /**
     * A JSON formatted `dependency` block as defined below. Dependency for the content item, what other content items it requires to work.
     * 
     */
    @Import(name="dependency")
    private @Nullable Output<String> dependency;

    /**
     * @return A JSON formatted `dependency` block as defined below. Dependency for the content item, what other content items it requires to work.
     * 
     */
    public Optional<Output<String>> dependency() {
        return Optional.ofNullable(this.dependency);
    }

    /**
     * The first publish date of solution content item.
     * 
     */
    @Import(name="firstPublishDate")
    private @Nullable Output<String> firstPublishDate;

    /**
     * @return The first publish date of solution content item.
     * 
     */
    public Optional<Output<String>> firstPublishDate() {
        return Optional.ofNullable(this.firstPublishDate);
    }

    /**
     * The ID of the icon, this id can be fetched from the solution template.
     * 
     */
    @Import(name="iconId")
    private @Nullable Output<String> iconId;

    /**
     * @return The ID of the icon, this id can be fetched from the solution template.
     * 
     */
    public Optional<Output<String>> iconId() {
        return Optional.ofNullable(this.iconId);
    }

    /**
     * The kind of content the metadata is for. Possible values are `AnalyticsRule`, `AnalyticsRuleTemplate`, `AutomationRule`, `AzureFunction`, `DataConnector`, `DataType`, `HuntingQuery`, `InvestigationQuery`, `LogicAppsCustomConnector`, `Parser`, `Playbook`, `PlaybookTemplate`, `Solution`, `Watchlist`, `WatchlistTemplate`, `Workbook` and `WorkbookTemplate`.
     * 
     */
    @Import(name="kind", required=true)
    private Output<String> kind;

    /**
     * @return The kind of content the metadata is for. Possible values are `AnalyticsRule`, `AnalyticsRuleTemplate`, `AutomationRule`, `AzureFunction`, `DataConnector`, `DataType`, `HuntingQuery`, `InvestigationQuery`, `LogicAppsCustomConnector`, `Parser`, `Playbook`, `PlaybookTemplate`, `Solution`, `Watchlist`, `WatchlistTemplate`, `Workbook` and `WorkbookTemplate`.
     * 
     */
    public Output<String> kind() {
        return this.kind;
    }

    /**
     * The last publish date of solution content item.
     * 
     */
    @Import(name="lastPublishDate")
    private @Nullable Output<String> lastPublishDate;

    /**
     * @return The last publish date of solution content item.
     * 
     */
    public Optional<Output<String>> lastPublishDate() {
        return Optional.ofNullable(this.lastPublishDate);
    }

    /**
     * The name which should be used for this Sentinel Metadata. Changing this forces a new Sentinel Metadata to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output<String> name;

    /**
     * @return The name which should be used for this Sentinel Metadata. Changing this forces a new Sentinel Metadata to be created.
     * 
     */
    public Optional<Output<String>> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The ID of the parent resource ID of the content item, which the metadata belongs to.
     * 
     */
    @Import(name="parentId", required=true)
    private Output<String> parentId;

    /**
     * @return The ID of the parent resource ID of the content item, which the metadata belongs to.
     * 
     */
    public Output<String> parentId() {
        return this.parentId;
    }

    @Import(name="previewImages")
    private @Nullable Output<List<String>> previewImages;

    public Optional<Output<List<String>>> previewImages() {
        return Optional.ofNullable(this.previewImages);
    }

    @Import(name="previewImagesDarks")
    private @Nullable Output<List<String>> previewImagesDarks;

    public Optional<Output<List<String>>> previewImagesDarks() {
        return Optional.ofNullable(this.previewImagesDarks);
    }

    /**
     * Specifies a list of providers for the solution content item.
     * 
     */
    @Import(name="providers")
    private @Nullable Output<List<String>> providers;

    /**
     * @return Specifies a list of providers for the solution content item.
     * 
     */
    public Optional<Output<List<String>>> providers() {
        return Optional.ofNullable(this.providers);
    }

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

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

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

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

    /**
     * Specifies a list of tactics the resource covers.
     * 
     */
    @Import(name="threatAnalysisTactics")
    private @Nullable Output<List<String>> threatAnalysisTactics;

    /**
     * @return Specifies a list of tactics the resource covers.
     * 
     */
    public Optional<Output<List<String>>> threatAnalysisTactics() {
        return Optional.ofNullable(this.threatAnalysisTactics);
    }

    /**
     * Specifies a list of techniques the resource covers.
     * 
     */
    @Import(name="threatAnalysisTechniques")
    private @Nullable Output<List<String>> threatAnalysisTechniques;

    /**
     * @return Specifies a list of techniques the resource covers.
     * 
     */
    public Optional<Output<List<String>>> threatAnalysisTechniques() {
        return Optional.ofNullable(this.threatAnalysisTechniques);
    }

    /**
     * Version of the content.
     * 
     */
    @Import(name="version")
    private @Nullable Output<String> version;

    /**
     * @return Version of the content.
     * 
     */
    public Optional<Output<String>> version() {
        return Optional.ofNullable(this.version);
    }

    /**
     * The ID of the Log Analytics Workspace. Changing this forces a new Sentinel Metadata to be created.
     * 
     */
    @Import(name="workspaceId", required=true)
    private Output<String> workspaceId;

    /**
     * @return The ID of the Log Analytics Workspace. Changing this forces a new Sentinel Metadata to be created.
     * 
     */
    public Output<String> workspaceId() {
        return this.workspaceId;
    }

    private MetadataArgs() {}

    private MetadataArgs(MetadataArgs $) {
        this.author = $.author;
        this.category = $.category;
        this.contentId = $.contentId;
        this.contentSchemaVersion = $.contentSchemaVersion;
        this.customVersion = $.customVersion;
        this.dependency = $.dependency;
        this.firstPublishDate = $.firstPublishDate;
        this.iconId = $.iconId;
        this.kind = $.kind;
        this.lastPublishDate = $.lastPublishDate;
        this.name = $.name;
        this.parentId = $.parentId;
        this.previewImages = $.previewImages;
        this.previewImagesDarks = $.previewImagesDarks;
        this.providers = $.providers;
        this.source = $.source;
        this.support = $.support;
        this.threatAnalysisTactics = $.threatAnalysisTactics;
        this.threatAnalysisTechniques = $.threatAnalysisTechniques;
        this.version = $.version;
        this.workspaceId = $.workspaceId;
    }

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

    public static final class Builder {
        private MetadataArgs $;

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

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

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

        /**
         * @param author An `author` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder author(MetadataAuthorArgs author) {
            return author(Output.of(author));
        }

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

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

        /**
         * @param contentId The ID of the content. Used to identify dependencies and content from solutions or community.
         * 
         * @return builder
         * 
         */
        public Builder contentId(Output<String> contentId) {
            $.contentId = contentId;
            return this;
        }

        /**
         * @param contentId The ID of the content. Used to identify dependencies and content from solutions or community.
         * 
         * @return builder
         * 
         */
        public Builder contentId(String contentId) {
            return contentId(Output.of(contentId));
        }

        /**
         * @param contentSchemaVersion Schema version of the content. Can be used to distinguish between flow based on the schema version.
         * 
         * @return builder
         * 
         */
        public Builder contentSchemaVersion(@Nullable Output<String> contentSchemaVersion) {
            $.contentSchemaVersion = contentSchemaVersion;
            return this;
        }

        /**
         * @param contentSchemaVersion Schema version of the content. Can be used to distinguish between flow based on the schema version.
         * 
         * @return builder
         * 
         */
        public Builder contentSchemaVersion(String contentSchemaVersion) {
            return contentSchemaVersion(Output.of(contentSchemaVersion));
        }

        /**
         * @param customVersion The Custom version of the content.
         * 
         * @return builder
         * 
         */
        public Builder customVersion(@Nullable Output<String> customVersion) {
            $.customVersion = customVersion;
            return this;
        }

        /**
         * @param customVersion The Custom version of the content.
         * 
         * @return builder
         * 
         */
        public Builder customVersion(String customVersion) {
            return customVersion(Output.of(customVersion));
        }

        /**
         * @param dependency A JSON formatted `dependency` block as defined below. Dependency for the content item, what other content items it requires to work.
         * 
         * @return builder
         * 
         */
        public Builder dependency(@Nullable Output<String> dependency) {
            $.dependency = dependency;
            return this;
        }

        /**
         * @param dependency A JSON formatted `dependency` block as defined below. Dependency for the content item, what other content items it requires to work.
         * 
         * @return builder
         * 
         */
        public Builder dependency(String dependency) {
            return dependency(Output.of(dependency));
        }

        /**
         * @param firstPublishDate The first publish date of solution content item.
         * 
         * @return builder
         * 
         */
        public Builder firstPublishDate(@Nullable Output<String> firstPublishDate) {
            $.firstPublishDate = firstPublishDate;
            return this;
        }

        /**
         * @param firstPublishDate The first publish date of solution content item.
         * 
         * @return builder
         * 
         */
        public Builder firstPublishDate(String firstPublishDate) {
            return firstPublishDate(Output.of(firstPublishDate));
        }

        /**
         * @param iconId The ID of the icon, this id can be fetched from the solution template.
         * 
         * @return builder
         * 
         */
        public Builder iconId(@Nullable Output<String> iconId) {
            $.iconId = iconId;
            return this;
        }

        /**
         * @param iconId The ID of the icon, this id can be fetched from the solution template.
         * 
         * @return builder
         * 
         */
        public Builder iconId(String iconId) {
            return iconId(Output.of(iconId));
        }

        /**
         * @param kind The kind of content the metadata is for. Possible values are `AnalyticsRule`, `AnalyticsRuleTemplate`, `AutomationRule`, `AzureFunction`, `DataConnector`, `DataType`, `HuntingQuery`, `InvestigationQuery`, `LogicAppsCustomConnector`, `Parser`, `Playbook`, `PlaybookTemplate`, `Solution`, `Watchlist`, `WatchlistTemplate`, `Workbook` and `WorkbookTemplate`.
         * 
         * @return builder
         * 
         */
        public Builder kind(Output<String> kind) {
            $.kind = kind;
            return this;
        }

        /**
         * @param kind The kind of content the metadata is for. Possible values are `AnalyticsRule`, `AnalyticsRuleTemplate`, `AutomationRule`, `AzureFunction`, `DataConnector`, `DataType`, `HuntingQuery`, `InvestigationQuery`, `LogicAppsCustomConnector`, `Parser`, `Playbook`, `PlaybookTemplate`, `Solution`, `Watchlist`, `WatchlistTemplate`, `Workbook` and `WorkbookTemplate`.
         * 
         * @return builder
         * 
         */
        public Builder kind(String kind) {
            return kind(Output.of(kind));
        }

        /**
         * @param lastPublishDate The last publish date of solution content item.
         * 
         * @return builder
         * 
         */
        public Builder lastPublishDate(@Nullable Output<String> lastPublishDate) {
            $.lastPublishDate = lastPublishDate;
            return this;
        }

        /**
         * @param lastPublishDate The last publish date of solution content item.
         * 
         * @return builder
         * 
         */
        public Builder lastPublishDate(String lastPublishDate) {
            return lastPublishDate(Output.of(lastPublishDate));
        }

        /**
         * @param name The name which should be used for this Sentinel Metadata. Changing this forces a new Sentinel Metadata to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output<String> name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name which should be used for this Sentinel Metadata. Changing this forces a new Sentinel Metadata to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param parentId The ID of the parent resource ID of the content item, which the metadata belongs to.
         * 
         * @return builder
         * 
         */
        public Builder parentId(Output<String> parentId) {
            $.parentId = parentId;
            return this;
        }

        /**
         * @param parentId The ID of the parent resource ID of the content item, which the metadata belongs to.
         * 
         * @return builder
         * 
         */
        public Builder parentId(String parentId) {
            return parentId(Output.of(parentId));
        }

        public Builder previewImages(@Nullable Output<List<String>> previewImages) {
            $.previewImages = previewImages;
            return this;
        }

        public Builder previewImages(List<String> previewImages) {
            return previewImages(Output.of(previewImages));
        }

        public Builder previewImages(String... previewImages) {
            return previewImages(List.of(previewImages));
        }

        public Builder previewImagesDarks(@Nullable Output<List<String>> previewImagesDarks) {
            $.previewImagesDarks = previewImagesDarks;
            return this;
        }

        public Builder previewImagesDarks(List<String> previewImagesDarks) {
            return previewImagesDarks(Output.of(previewImagesDarks));
        }

        public Builder previewImagesDarks(String... previewImagesDarks) {
            return previewImagesDarks(List.of(previewImagesDarks));
        }

        /**
         * @param providers Specifies a list of providers for the solution content item.
         * 
         * @return builder
         * 
         */
        public Builder providers(@Nullable Output<List<String>> providers) {
            $.providers = providers;
            return this;
        }

        /**
         * @param providers Specifies a list of providers for the solution content item.
         * 
         * @return builder
         * 
         */
        public Builder providers(List<String> providers) {
            return providers(Output.of(providers));
        }

        /**
         * @param providers Specifies a list of providers for the solution content item.
         * 
         * @return builder
         * 
         */
        public Builder providers(String... providers) {
            return providers(List.of(providers));
        }

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

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

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

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

        /**
         * @param threatAnalysisTactics Specifies a list of tactics the resource covers.
         * 
         * @return builder
         * 
         */
        public Builder threatAnalysisTactics(@Nullable Output<List<String>> threatAnalysisTactics) {
            $.threatAnalysisTactics = threatAnalysisTactics;
            return this;
        }

        /**
         * @param threatAnalysisTactics Specifies a list of tactics the resource covers.
         * 
         * @return builder
         * 
         */
        public Builder threatAnalysisTactics(List<String> threatAnalysisTactics) {
            return threatAnalysisTactics(Output.of(threatAnalysisTactics));
        }

        /**
         * @param threatAnalysisTactics Specifies a list of tactics the resource covers.
         * 
         * @return builder
         * 
         */
        public Builder threatAnalysisTactics(String... threatAnalysisTactics) {
            return threatAnalysisTactics(List.of(threatAnalysisTactics));
        }

        /**
         * @param threatAnalysisTechniques Specifies a list of techniques the resource covers.
         * 
         * @return builder
         * 
         */
        public Builder threatAnalysisTechniques(@Nullable Output<List<String>> threatAnalysisTechniques) {
            $.threatAnalysisTechniques = threatAnalysisTechniques;
            return this;
        }

        /**
         * @param threatAnalysisTechniques Specifies a list of techniques the resource covers.
         * 
         * @return builder
         * 
         */
        public Builder threatAnalysisTechniques(List<String> threatAnalysisTechniques) {
            return threatAnalysisTechniques(Output.of(threatAnalysisTechniques));
        }

        /**
         * @param threatAnalysisTechniques Specifies a list of techniques the resource covers.
         * 
         * @return builder
         * 
         */
        public Builder threatAnalysisTechniques(String... threatAnalysisTechniques) {
            return threatAnalysisTechniques(List.of(threatAnalysisTechniques));
        }

        /**
         * @param version Version of the content.
         * 
         * @return builder
         * 
         */
        public Builder version(@Nullable Output<String> version) {
            $.version = version;
            return this;
        }

        /**
         * @param version Version of the content.
         * 
         * @return builder
         * 
         */
        public Builder version(String version) {
            return version(Output.of(version));
        }

        /**
         * @param workspaceId The ID of the Log Analytics Workspace. Changing this forces a new Sentinel Metadata to be created.
         * 
         * @return builder
         * 
         */
        public Builder workspaceId(Output<String> workspaceId) {
            $.workspaceId = workspaceId;
            return this;
        }

        /**
         * @param workspaceId The ID of the Log Analytics Workspace. Changing this forces a new Sentinel Metadata to be created.
         * 
         * @return builder
         * 
         */
        public Builder workspaceId(String workspaceId) {
            return workspaceId(Output.of(workspaceId));
        }

        public MetadataArgs build() {
            $.contentId = Objects.requireNonNull($.contentId, "expected parameter 'contentId' to be non-null");
            $.kind = Objects.requireNonNull($.kind, "expected parameter 'kind' to be non-null");
            $.parentId = Objects.requireNonNull($.parentId, "expected parameter 'parentId' to be non-null");
            $.workspaceId = Objects.requireNonNull($.workspaceId, "expected parameter 'workspaceId' to be non-null");
            return $;
        }
    }

}
