class ZuoraConnect::StaticController

def health

def health
  render json: {
    message: "Alive",
    status: 200
  }, status: 200
end

def initialize_app

def initialize_app
  begin
    authenticate_connect_app_request
    render json: {
      message: "Success",
      status: 200
    }, status: 200
  rescue
    render json: {
      message: "Failure initializing app instance",
      status: 400
    }, status: 400
  end
end

def invalid_app_instance_error

def invalid_app_instance_error
  respond_to do |format|
    format.html
    format.json {render json: { message: "Invalid App Instance", status: 500 }, status: 500 }
  end
end

def launch

def launch
  @ids = JSON.parse(Base64.decode64(URI.decode(params["ids"])))
  if @ids.count == 1
    redirect_to :action => :switch, :commit => @ids[0][0]
  else
    respond_to do |format|
      format.html
    end
  end
end

def metrics

def metrics
  type = params[:type].present? ? params[:type] : "versions"
  render json: ZuoraConnect::AppInstance.get_metrics(type).to_json, status: 200
end

def session_error

def session_error
  respond_to do |format|
    format.html
    format.json { render json: { message: "Session Error", status: 500 }, status: 500 }
  end
end

def switch

def switch
  host = request.headers["HTTP_X_FORWARDED_HOST"]
  zuora_client = ZuoraAPI::Login.new(url: "https://#{host}")
  menus = zuora_client.get_full_nav(cookies.to_h)["menus"]
  menus = JSON.parse(response)["menus"]
  app = menus.select do |item|
    matches = /(?<=.com\/)(.*?)(?=\/|$)/.match(item["url"])
    if !matches.blank?
      matches[0] == ENV["DEIS_APP"]
    end
  end
  url_tasks = JSON.parse(Base64.decode64(URI.decode(URI.parse(app[0]["url"]).query.split("ids=")[1])))
  if url_tasks.map { |i| i[0] }.include?(params["commit"].to_i)
    @appinstance = ZuoraConnect::AppInstance.find(params["commit"].to_i)
    @appinstance.new_session(session: {})
    @appinstance.cache_app_instance
    redirect_to main_app.root_path
  else
    redirect_to main_app.root_path
  end
end