// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;

namespace Pulumi.Nexus
{
    [NexusResourceType("nexus:index/nexusRepository:NexusRepository")]
    public partial class NexusRepository : Pulumi.CustomResource
    {
        /// <summary>
        /// Apt signing configuration for the repository
        /// </summary>
        [Output("aptSignings")]
        public Output<ImmutableArray<Outputs.NexusRepositoryAptSigning>> AptSignings { get; private set; } = null!;

        /// <summary>
        /// Apt specific configuration of the repository
        /// </summary>
        [Output("apts")]
        public Output<ImmutableArray<Outputs.NexusRepositoryApt>> Apts { get; private set; } = null!;

        /// <summary>
        /// Bower specific configuration of the repository
        /// </summary>
        [Output("bowers")]
        public Output<ImmutableArray<Outputs.NexusRepositoryBower>> Bowers { get; private set; } = null!;

        /// <summary>
        /// Cleanup policies
        /// </summary>
        [Output("cleanups")]
        public Output<ImmutableArray<Outputs.NexusRepositoryCleanup>> Cleanups { get; private set; } = null!;

        /// <summary>
        /// Configuration for docker proxy repository
        /// </summary>
        [Output("dockerProxy")]
        public Output<Outputs.NexusRepositoryDockerProxy?> DockerProxy { get; private set; } = null!;

        /// <summary>
        /// Docker specific configuration of the repository
        /// </summary>
        [Output("dockers")]
        public Output<ImmutableArray<Outputs.NexusRepositoryDocker>> Dockers { get; private set; } = null!;

        /// <summary>
        /// Repository format. Possible values: `apt`, `bower`, `conan`, `docker`, `gitlfs`, `go`, `helm`, `maven2`, `npm`, `nuget`,
        /// `p2`, `pypi`, `raw`, `rubygems`, `yum`
        /// </summary>
        [Output("format")]
        public Output<string> Format { get; private set; } = null!;

        /// <summary>
        /// Configuration for repository group
        /// </summary>
        [Output("group")]
        public Output<Outputs.NexusRepositoryGroup?> Group { get; private set; } = null!;

        /// <summary>
        /// HTTP Client configuration for proxy repositories. Required for docker proxy repositories.
        /// </summary>
        [Output("httpClient")]
        public Output<Outputs.NexusRepositoryHttpClient?> HttpClient { get; private set; } = null!;

        /// <summary>
        /// Maven specific configuration of the repository
        /// </summary>
        [Output("maven")]
        public Output<Outputs.NexusRepositoryMaven?> Maven { get; private set; } = null!;

        /// <summary>
        /// A unique identifier for this repository
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Configuration of the negative cache handling
        /// </summary>
        [Output("negativeCache")]
        public Output<Outputs.NexusRepositoryNegativeCache?> NegativeCache { get; private set; } = null!;

        /// <summary>
        /// Configuration for the nuget proxy repository
        /// </summary>
        [Output("nugetProxy")]
        public Output<Outputs.NexusRepositoryNugetProxy?> NugetProxy { get; private set; } = null!;

        /// <summary>
        /// Whether this repository accepts incoming requests
        /// </summary>
        [Output("online")]
        public Output<bool?> Online { get; private set; } = null!;

        /// <summary>
        /// Configuration for the proxy repository
        /// </summary>
        [Output("proxy")]
        public Output<Outputs.NexusRepositoryProxy?> Proxy { get; private set; } = null!;

        /// <summary>
        /// The storage configuration of the repository
        /// </summary>
        [Output("storage")]
        public Output<Outputs.NexusRepositoryStorage?> Storage { get; private set; } = null!;

        /// <summary>
        /// Repository type. Possible values: `group`, `hosted`, `proxy`
        /// </summary>
        [Output("type")]
        public Output<string> Type { get; private set; } = null!;

        /// <summary>
        /// Yum specific configuration of the repository
        /// </summary>
        [Output("yums")]
        public Output<ImmutableArray<Outputs.NexusRepositoryYum>> Yums { get; private set; } = null!;


        /// <summary>
        /// Create a NexusRepository resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public NexusRepository(string name, NexusRepositoryArgs args, CustomResourceOptions? options = null)
            : base("nexus:index/nexusRepository:NexusRepository", name, args ?? new NexusRepositoryArgs(), MakeResourceOptions(options, ""))
        {
        }

        private NexusRepository(string name, Input<string> id, NexusRepositoryState? state = null, CustomResourceOptions? options = null)
            : base("nexus:index/nexusRepository:NexusRepository", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "https://github.com/SimCubeLtd/pulumi-nexus/releases/download/v${VERSION}",
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing NexusRepository resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static NexusRepository Get(string name, Input<string> id, NexusRepositoryState? state = null, CustomResourceOptions? options = null)
        {
            return new NexusRepository(name, id, state, options);
        }
    }

    public sealed class NexusRepositoryArgs : Pulumi.ResourceArgs
    {
        [Input("aptSignings")]
        private InputList<Inputs.NexusRepositoryAptSigningArgs>? _aptSignings;

        /// <summary>
        /// Apt signing configuration for the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryAptSigningArgs> AptSignings
        {
            get => _aptSignings ?? (_aptSignings = new InputList<Inputs.NexusRepositoryAptSigningArgs>());
            set => _aptSignings = value;
        }

        [Input("apts")]
        private InputList<Inputs.NexusRepositoryAptArgs>? _apts;

        /// <summary>
        /// Apt specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryAptArgs> Apts
        {
            get => _apts ?? (_apts = new InputList<Inputs.NexusRepositoryAptArgs>());
            set => _apts = value;
        }

        [Input("bowers")]
        private InputList<Inputs.NexusRepositoryBowerArgs>? _bowers;

        /// <summary>
        /// Bower specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryBowerArgs> Bowers
        {
            get => _bowers ?? (_bowers = new InputList<Inputs.NexusRepositoryBowerArgs>());
            set => _bowers = value;
        }

        [Input("cleanups")]
        private InputList<Inputs.NexusRepositoryCleanupArgs>? _cleanups;

        /// <summary>
        /// Cleanup policies
        /// </summary>
        public InputList<Inputs.NexusRepositoryCleanupArgs> Cleanups
        {
            get => _cleanups ?? (_cleanups = new InputList<Inputs.NexusRepositoryCleanupArgs>());
            set => _cleanups = value;
        }

        /// <summary>
        /// Configuration for docker proxy repository
        /// </summary>
        [Input("dockerProxy")]
        public Input<Inputs.NexusRepositoryDockerProxyArgs>? DockerProxy { get; set; }

        [Input("dockers")]
        private InputList<Inputs.NexusRepositoryDockerArgs>? _dockers;

        /// <summary>
        /// Docker specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryDockerArgs> Dockers
        {
            get => _dockers ?? (_dockers = new InputList<Inputs.NexusRepositoryDockerArgs>());
            set => _dockers = value;
        }

        /// <summary>
        /// Repository format. Possible values: `apt`, `bower`, `conan`, `docker`, `gitlfs`, `go`, `helm`, `maven2`, `npm`, `nuget`,
        /// `p2`, `pypi`, `raw`, `rubygems`, `yum`
        /// </summary>
        [Input("format", required: true)]
        public Input<string> Format { get; set; } = null!;

        /// <summary>
        /// Configuration for repository group
        /// </summary>
        [Input("group")]
        public Input<Inputs.NexusRepositoryGroupArgs>? Group { get; set; }

        /// <summary>
        /// HTTP Client configuration for proxy repositories. Required for docker proxy repositories.
        /// </summary>
        [Input("httpClient")]
        public Input<Inputs.NexusRepositoryHttpClientArgs>? HttpClient { get; set; }

        /// <summary>
        /// Maven specific configuration of the repository
        /// </summary>
        [Input("maven")]
        public Input<Inputs.NexusRepositoryMavenArgs>? Maven { get; set; }

        /// <summary>
        /// A unique identifier for this repository
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Configuration of the negative cache handling
        /// </summary>
        [Input("negativeCache")]
        public Input<Inputs.NexusRepositoryNegativeCacheArgs>? NegativeCache { get; set; }

        /// <summary>
        /// Configuration for the nuget proxy repository
        /// </summary>
        [Input("nugetProxy")]
        public Input<Inputs.NexusRepositoryNugetProxyArgs>? NugetProxy { get; set; }

        /// <summary>
        /// Whether this repository accepts incoming requests
        /// </summary>
        [Input("online")]
        public Input<bool>? Online { get; set; }

        /// <summary>
        /// Configuration for the proxy repository
        /// </summary>
        [Input("proxy")]
        public Input<Inputs.NexusRepositoryProxyArgs>? Proxy { get; set; }

        /// <summary>
        /// The storage configuration of the repository
        /// </summary>
        [Input("storage")]
        public Input<Inputs.NexusRepositoryStorageArgs>? Storage { get; set; }

        /// <summary>
        /// Repository type. Possible values: `group`, `hosted`, `proxy`
        /// </summary>
        [Input("type", required: true)]
        public Input<string> Type { get; set; } = null!;

        [Input("yums")]
        private InputList<Inputs.NexusRepositoryYumArgs>? _yums;

        /// <summary>
        /// Yum specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryYumArgs> Yums
        {
            get => _yums ?? (_yums = new InputList<Inputs.NexusRepositoryYumArgs>());
            set => _yums = value;
        }

        public NexusRepositoryArgs()
        {
        }
    }

    public sealed class NexusRepositoryState : Pulumi.ResourceArgs
    {
        [Input("aptSignings")]
        private InputList<Inputs.NexusRepositoryAptSigningGetArgs>? _aptSignings;

        /// <summary>
        /// Apt signing configuration for the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryAptSigningGetArgs> AptSignings
        {
            get => _aptSignings ?? (_aptSignings = new InputList<Inputs.NexusRepositoryAptSigningGetArgs>());
            set => _aptSignings = value;
        }

        [Input("apts")]
        private InputList<Inputs.NexusRepositoryAptGetArgs>? _apts;

        /// <summary>
        /// Apt specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryAptGetArgs> Apts
        {
            get => _apts ?? (_apts = new InputList<Inputs.NexusRepositoryAptGetArgs>());
            set => _apts = value;
        }

        [Input("bowers")]
        private InputList<Inputs.NexusRepositoryBowerGetArgs>? _bowers;

        /// <summary>
        /// Bower specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryBowerGetArgs> Bowers
        {
            get => _bowers ?? (_bowers = new InputList<Inputs.NexusRepositoryBowerGetArgs>());
            set => _bowers = value;
        }

        [Input("cleanups")]
        private InputList<Inputs.NexusRepositoryCleanupGetArgs>? _cleanups;

        /// <summary>
        /// Cleanup policies
        /// </summary>
        public InputList<Inputs.NexusRepositoryCleanupGetArgs> Cleanups
        {
            get => _cleanups ?? (_cleanups = new InputList<Inputs.NexusRepositoryCleanupGetArgs>());
            set => _cleanups = value;
        }

        /// <summary>
        /// Configuration for docker proxy repository
        /// </summary>
        [Input("dockerProxy")]
        public Input<Inputs.NexusRepositoryDockerProxyGetArgs>? DockerProxy { get; set; }

        [Input("dockers")]
        private InputList<Inputs.NexusRepositoryDockerGetArgs>? _dockers;

        /// <summary>
        /// Docker specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryDockerGetArgs> Dockers
        {
            get => _dockers ?? (_dockers = new InputList<Inputs.NexusRepositoryDockerGetArgs>());
            set => _dockers = value;
        }

        /// <summary>
        /// Repository format. Possible values: `apt`, `bower`, `conan`, `docker`, `gitlfs`, `go`, `helm`, `maven2`, `npm`, `nuget`,
        /// `p2`, `pypi`, `raw`, `rubygems`, `yum`
        /// </summary>
        [Input("format")]
        public Input<string>? Format { get; set; }

        /// <summary>
        /// Configuration for repository group
        /// </summary>
        [Input("group")]
        public Input<Inputs.NexusRepositoryGroupGetArgs>? Group { get; set; }

        /// <summary>
        /// HTTP Client configuration for proxy repositories. Required for docker proxy repositories.
        /// </summary>
        [Input("httpClient")]
        public Input<Inputs.NexusRepositoryHttpClientGetArgs>? HttpClient { get; set; }

        /// <summary>
        /// Maven specific configuration of the repository
        /// </summary>
        [Input("maven")]
        public Input<Inputs.NexusRepositoryMavenGetArgs>? Maven { get; set; }

        /// <summary>
        /// A unique identifier for this repository
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Configuration of the negative cache handling
        /// </summary>
        [Input("negativeCache")]
        public Input<Inputs.NexusRepositoryNegativeCacheGetArgs>? NegativeCache { get; set; }

        /// <summary>
        /// Configuration for the nuget proxy repository
        /// </summary>
        [Input("nugetProxy")]
        public Input<Inputs.NexusRepositoryNugetProxyGetArgs>? NugetProxy { get; set; }

        /// <summary>
        /// Whether this repository accepts incoming requests
        /// </summary>
        [Input("online")]
        public Input<bool>? Online { get; set; }

        /// <summary>
        /// Configuration for the proxy repository
        /// </summary>
        [Input("proxy")]
        public Input<Inputs.NexusRepositoryProxyGetArgs>? Proxy { get; set; }

        /// <summary>
        /// The storage configuration of the repository
        /// </summary>
        [Input("storage")]
        public Input<Inputs.NexusRepositoryStorageGetArgs>? Storage { get; set; }

        /// <summary>
        /// Repository type. Possible values: `group`, `hosted`, `proxy`
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        [Input("yums")]
        private InputList<Inputs.NexusRepositoryYumGetArgs>? _yums;

        /// <summary>
        /// Yum specific configuration of the repository
        /// </summary>
        public InputList<Inputs.NexusRepositoryYumGetArgs> Yums
        {
            get => _yums ?? (_yums = new InputList<Inputs.NexusRepositoryYumGetArgs>());
            set => _yums = value;
        }

        public NexusRepositoryState()
        {
        }
    }
}
