require 'react/sinatra/runtime'
require 'singleton'

module React
  module Sinatra
    # Class for expressing configuration delegated from classes.
    #
    # This #instance entrypoint is referred from application.
    class Configuration
      include Singleton

      attr_accessor :pool_size, :pool_timeout, :asset_path, :use_bundled_react, :env, :addon

      # Assigns runtime by given name.
      #
      # @param [String, Symbol] name The name of runtime
      # @see React::Sinatra::Runtime.[]
      # @return [React::Sinatra::Runtime::RuntimeBased]
      def runtime=(name)
        @runtime = Runtime[name.to_sym]
      end

      # Returns current runtime.
      # @return [React::Sinatra::Runtime::RuntimeBased]
      def runtime
        @runtime
      end

      # Assigns default values for use in server-side rendering.
      instance.pool_size    = 5
      instance.pool_timeout = 10
      instance.runtime      = :execjs

      instance.use_bundled_react = false
      instance.env = ENV['RACK_ENV'] || :development
      instance.addon = false
    end
  end
end