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

namespace Pulumiverse.Heroku
{
    public static class Config
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "IDE1006", Justification = 
        "Double underscore prefix used to avoid conflicts with variable names.")]
        private sealed class __Value<T>
        {
            private readonly Func<T> _getter;
            private T _value = default!;
            private bool _set;

            public __Value(Func<T> getter)
            {
                _getter = getter;
            }

            public T Get() => _set ? _value : _getter();

            public void Set(T value)
            {
                _value = value;
                _set = true;
            }
        }

        private static readonly global::Pulumi.Config __config = new global::Pulumi.Config("heroku");

        private static readonly __Value<string?> _apiKey = new __Value<string?>(() => __config.Get("apiKey"));
        public static string? ApiKey
        {
            get => _apiKey.Get();
            set => _apiKey.Set(value);
        }

        private static readonly __Value<ImmutableArray<Pulumiverse.Heroku.Config.Types.Customizations>> _customizations = new __Value<ImmutableArray<Pulumiverse.Heroku.Config.Types.Customizations>>(() => __config.GetObject<ImmutableArray<Pulumiverse.Heroku.Config.Types.Customizations>>("customizations"));
        public static ImmutableArray<Pulumiverse.Heroku.Config.Types.Customizations> Customizations
        {
            get => _customizations.Get();
            set => _customizations.Set(value);
        }

        private static readonly __Value<Pulumiverse.Heroku.Config.Types.Delays?> _delays = new __Value<Pulumiverse.Heroku.Config.Types.Delays?>(() => __config.GetObject<Pulumiverse.Heroku.Config.Types.Delays>("delays"));
        public static Pulumiverse.Heroku.Config.Types.Delays? Delays
        {
            get => _delays.Get();
            set => _delays.Set(value);
        }

        private static readonly __Value<string?> _email = new __Value<string?>(() => __config.Get("email"));
        public static string? Email
        {
            get => _email.Get();
            set => _email.Set(value);
        }

        private static readonly __Value<string?> _headers = new __Value<string?>(() => __config.Get("headers"));
        public static string? Headers
        {
            get => _headers.Get();
            set => _headers.Set(value);
        }

        private static readonly __Value<Pulumiverse.Heroku.Config.Types.Timeouts?> _timeouts = new __Value<Pulumiverse.Heroku.Config.Types.Timeouts?>(() => __config.GetObject<Pulumiverse.Heroku.Config.Types.Timeouts>("timeouts"));
        public static Pulumiverse.Heroku.Config.Types.Timeouts? Timeouts
        {
            get => _timeouts.Get();
            set => _timeouts.Set(value);
        }

        private static readonly __Value<string?> _url = new __Value<string?>(() => __config.Get("url"));
        public static string? Url
        {
            get => _url.Get();
            set => _url.Set(value);
        }

        public static class Types
        {

             public class Customizations
             {
                public bool? SetAddonConfigVarsInState { get; set; }
                public bool? SetAppAllConfigVarsInState { get; set; }
            }

             public class Delays
             {
                public int? PostAppCreateDelay { get; set; }
                public int? PostDomainCreateDelay { get; set; }
                public int? PostSpaceCreateDelay { get; set; }
            }

             public class Timeouts
             {
                public int? AddonCreateTimeout { get; set; }
            }
        }
    }
}
