class Admin::ConfigurationsController < Admin::BaseController

  # This method loads all basic configurations.
  def index
    @configurations = ::Configuration.load_sub_configurations
  end

  # Method to create or update the configurations.
  def create_or_update
    @configuration = @university.send("#{params[:type]}_configuration") || @university.send("build_#{params[:type]}_configuration")
    @configuration.attributes = permitted_params
    respond_to do |format|
      if @configuration.save
        @message = "Configuration settings for #{params[:type].classify} has updated."
        format.html {redirect_to admin_configurations_path}
        format.js {}
      else
        format.html { redirect_to admin_configurations_path, alert: "Cant create Configuration settings."}
        format.js {render partial: "admin/configurations/#{params[:type]}", locals: {configuration: @configuration}, within: "##{@configuration.class.model_name.singular}"}
      end
    end
  end

  private
  def permitted_params
    permitted_attributes = {
      linkedin: [:api_key, :api_secret, :enabled],
      facebook: [:app_id, :app_secret, :enabled],
      general: [:bcc_list, :domain_list, :application_name, :host, :default_mail_from,
             :homepage_message ],
      amazon: [:aws_access_key, :aws_bucket, :aws_secret_key, :enabled ],
      pusher: [:app_id, :api_key, :api_secret, :enabled],
      stripe: [:api_key, :publishable_api_key, :enabled],
      invite: [:amount, :enabled],
      google_analytic: [:code]
    }
    params.required(:configuration).permit(permitted_attributes[params[:type].to_sym] << :university_id)
  end

end
