class Admin::Legacy::HumanResources::CategoriesController <
    Admin::Legacy::HumanResources::Controller
  def index
    data = categories.includes(:employees, :group).by_group(params[:group_id])
    render_success :ok, json: data.map { |c| category_props(c) }
  end

  def show
    render_success :ok, json: category_props(category)
  end

  def create
    category = categories.build(category_params)
    if category.save
      render_success :ok, json: category_props(category)
    else
      render_error :unprocessable_entity, errors: category
    end
  end

  def update
    if category.update(category_params)
      render_success :ok, json: category_props(category)
    else
      render_error :unprocessable_entity, errors: category
    end
  end

  def destroy
    if category.destroy
      render_success :ok
    else
      render_error :unprocessable_entity, errors: category
    end
  end

  private
    def categories
      current_school.employee_categories
    end

    def category
      @category ||= categories.find_by(id: params[:id])
    end

    def group
      @group ||= current_school.employee_category_groups.find_by(id: params[:group_id])
    end

    def category_params
      params.permit(:order, :description, :name).merge(set_group)
    end

    def set_group
      {
        group: group
      }
    end

    def category_props(category)
      {}.tap do |prop|
        prop[:id] = category.id
        prop[:name] = category.name
        prop[:description] = category.description
        prop[:order] = category.order
        prop[:group_id] = category.group_id
        prop[:count] = category.employees.count
        prop[:group_name] = category.decorate.group_name
        prop[:group_order] = category.decorate.group_order
      end
    end
end
