class ActionController::Base
  before_action :lookup_domain, :set_locale

  private

  def lookup_domain
    if request.subdomain.present? && request.subdomain != "www"
      from = request.subdomain.downcase  + "." + request.domain.downcase
      @license = cache_license(ENV["SX_PROVISION_URL"], from) # request.subdomain.downcase
      if (!@license.nil?)
        logger.info "Location - " + @license.dbschema
        ActiveRecord::Base.establish_connection(website_connection(@license))
        # authenticate_session_token
        # logger.info "Connecting to - " + @license.subdomain + " - "+ @license.dbhost + "@" + @license.dbschema
      else
        # reconnect_default_db
        logger.info 'License is nil'
        # redirect_to root_url(:host => request.domain) + "store_error"
         render :json => [{ status: false, message: 'Invalid Access!'}]

      end
    else
      # check for license file
      if check_license
        current_license(ENV["SX_PROVISION_URL"])
      else
        redirect_to activate_path
      end
    end

  end

  def current_license(url)
    @license = License.new(url)
    flag = @license.detail_with_local_file()
    if (flag == 0)
      flash[:notice] = 'Expired or No License!'
    elsif (flag == 2)
      flash[:notice] = 'Expiring! Please, License extend...'
    else
      puts "RUN SAY BYAR"
    end
  end

  def cache_license(url, lookup)
    @license = License.new(url, lookup)

    if (@license.detail_with_local_cache(lookup) == true)
      return @license
    else
      return nil
    end
  end

  def check_license
    License.check_license_file
  end

  def check_installation
    if current_company.nil?
      redirect_to install_path
    end
  end

  def website_connection(license)
    default_connection.dup.update(:host => license.dbhost, :database => license.dbschema.to_s.downcase,
    :username => license.dbusername, :password => license.dbpassword)

  end

  def reconnect_default_db
    ActiveRecord::Base.establish_connection(Rails.env)
  end

  # Regular database.yml configuration hash
  def default_connection
    @default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
  end

  #change locallization
  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

  # RESTful url for localize
  def default_url_options
    { locale: I18n.locale }
  end

end

class ActionController::API
  before_action :lookup_domain

  private

  def lookup_domain
    if request.subdomain.present? && request.subdomain != "www"
      from = request.subdomain.downcase  + "." + request.domain.downcase
      @license = cache_license(ENV["SX_PROVISION_URL"], from) # request.subdomain.downcase
      if (!@license.nil?)
        logger.info "Location - " + @license.dbschema
        ActiveRecord::Base.establish_connection(website_connection(@license))
        # authenticate_session_token
        # logger.info "Connecting to - " + @license.subdomain + " - "+ @license.dbhost + "@" + @license.dbschema
      else
        # reconnect_default_db
        logger.info 'License is nil'
        # redirect_to root_url(:host => request.domain) + "store_error"
         render :json => [{ status: false, message: 'Invalid Access!'}]
      end
    end
  end

  def cache_license(url, lookup)
    @license = License.new(url, lookup)

    if (@license.detail_with_local_cache(lookup) == true)
      return @license
    else
      return nil
    end
  end

  def website_connection(license)
    default_connection.dup.update(:host => license.dbhost, :database => license.dbschema.to_s.downcase,
    :username => license.dbusername, :password => license.dbpassword)

  end

  def reconnect_default_db
    ActiveRecord::Base.establish_connection(Rails.env)
  end

  # Regular database.yml configuration hash
  def default_connection
    @default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
  end

  #change locallization
  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
  end

  # RESTful url for localize
  def default_url_options
    { locale: I18n.locale }
  end

end
