module MultiTenancy
  extend ActiveSupport::Concern

  included do
    set_current_tenant_through_filter if respond_to? :set_current_tenant_through_filter
    before_action :set_current_tenant_by_subdomain_or_name if respond_to? :before_action
    helper_method :current_shop if respond_to? :helper_method
  end

  private
  def set_current_tenant_by_subdomain_or_name
    find_tenant_by_subdomain_or_name || not_found
  end

  def find_tenant_by_subdomain_or_name
    if request.subdomains.first && request.subdomains.first != "www"
      set_current_tenant(Shop.find_by(subdomain: request.subdomains.first))
    elsif Shop.count == 1
      set_current_tenant(Shop.first)
    end
  end

  def not_found
    respond_to do |format|
      format.html { render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found }
      format.json { head :not_found }
    end
  end

  def current_shop
    ActsAsTenant.current_tenant
  end
end
