class UserGroupsController < ApplicationController
  before_action :set_user_group, only: [ :show, :edit, :update, :destroy ]
  before_action :check_policy, only: [ :index, :new, :create ]
  before_action :prepare_options, only: [ :new, :edit ]

  # GET /user_groups
  # GET /user_groups.json
  def index
    @user_groups = UserGroup.order(:position)

    respond_to do |format|
      format.html # index.html.erb
    end
  end

  # GET /user_groups/1
  # GET /user_groups/1.json
  def show
    respond_to do |format|
      format.html # show.html.erb
    end
  end

  # GET /user_groups/new
  def new
    @user_group = UserGroup.new
  end

  # GET /user_groups/1/edit
  def edit
  end

  # POST /user_groups
  # POST /user_groups.json
  def create
    @user_group = UserGroup.new(user_group_params)

    respond_to do |format|
      if @user_group.save
        format.html { redirect_to @user_group, notice: t("controller.successfully_created", model: t("activerecord.models.user_group")) }
        format.json { render json: @user_group, status: :created, location: @user_group }
      else
        prepare_options
        format.html { render action: "new" }
        format.json { render json: @user_group.errors, status: :unprocessable_entity }
      end
    end
  end

  # PUT /user_groups/1
  # PUT /user_groups/1.json
  def update
    if params[:move]
      move_position(@user_group, params[:move])
      return
    end

    respond_to do |format|
      if @user_group.update(user_group_params)
        format.html { redirect_to @user_group, notice: t("controller.successfully_updated", model: t("activerecord.models.user_group")) }
        format.json { head :no_content }
      else
        prepare_options
        format.html { render action: "edit" }
        format.json { render json: @user_group.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /user_groups/1
  # DELETE /user_groups/1.json
  def destroy
    @user_group.destroy

    respond_to do |format|
      format.html { redirect_to user_groups_url }
      format.json { head :no_content }
    end
  end

  private

  def set_user_group
    @user_group = UserGroup.find(params[:id])
    authorize @user_group
  end

  def check_policy
    authorize UserGroup
  end

  def user_group_params
    params.require(:user_group).permit(
      :name, :display_name, :note, :valid_period_for_new_user,
      :expired_at, :number_of_day_to_notify_overdue,
      :number_of_day_to_notify_overdue,
      :number_of_day_to_notify_due_date,
      :number_of_time_to_notify_overdue,
      # EnjuCirculation
      { user_group_has_checkout_types_attributes: [
        :id, :checkout_type_id, :checkout_limit, :checkout_period, :checkout_renewal_limit,
        :reservation_limit, :reservation_expired_period, :set_due_date_before_closing_day
      ] }
    )
  end

  def prepare_options
    if defined?(EnjuCirculation)
      @checkout_types = CheckoutType.select([ :id, :display_name, :position ])
    end
  end
end
