class ClosetListsController < ApplicationController
  before_action :authorize_user!
  before_action :find_closet_list, :only => [:edit, :update, :destroy]

  def create
    @closet_list = current_user.closet_lists.build closet_list_params
    if @closet_list.save
      save_successful!
    else
      save_failed!
      render action: :new, status: :unprocessable_entity
    end
  end

  def destroy
    @closet_list.destroy
    flash[:notice] = "Successfully deleted \"#{@closet_list.name}\""
    redirect_to user_closet_hangers_path(current_user)
  end

  def new
    @closet_list = current_user.closet_lists.build closet_list_params
  end

  def update
    @closet_list.attributes = closet_list_params
    if @closet_list.save
      save_successful!
    else
      save_failed!
      render action: :edit, status: :unprocessable_entity
    end
  end

  protected

  def closet_list_params
    params.require(:closet_list).permit(
      :description, :hangers_owned, :name, :visibility)
  end

  def find_closet_list
    @closet_list = current_user.closet_lists.find params[:id]
  end

  def save_failed!
    flash.now[:alert] = "We can't save this list because: #{@closet_list.errors.full_messages.to_sentence}"
  end

  def save_successful!
    flash[:notice] = "Successfully saved \"#{@closet_list.name}\""
    redirect_to user_closet_hangers_path(current_user)
  end
end