# typed: true
# frozen_string_literal: true

require_relative "../../global"
require_relative "../../env_config"

File.open("#{__dir__}/../../env_config.rbi", "w") do |file|
  file.write(<<~RUBY)
    # typed: strict

    module Homebrew::EnvConfig
  RUBY

  dynamic_methods = {}
  Homebrew::EnvConfig::ENVS.each do |env, hash|
    next if Homebrew::EnvConfig::CUSTOM_IMPLEMENTATIONS.include?(env)

    name = Homebrew::EnvConfig.env_method_name(env, hash)
    dynamic_methods[name] = { default: hash[:default] }
  end

  methods = Homebrew::EnvConfig.methods(false).map(&:to_s).select { |method| dynamic_methods.key?(method) }.sort

  methods.each do |method|
    return_type = if method.end_with?("?")
      T::Boolean
    elsif (default = dynamic_methods[method][:default])
      default.class
    else
      T.nilable(String)
    end

    file.write(<<-RUBY)
  sig { returns(#{return_type}) }
  def self.#{method}; end
    RUBY

    file.write("\n") unless method == methods.last
  end

  file.puts "end"
end
