class Admin::Legacy::HumanResources::Employees::AdditionalIdsController <
  Admin::Legacy::HumanResources::Controller
  def index
    render_success :ok, json: ids.map { |i| id_props(i) }
  end

  def show
    render_success :ok, json: id_props(id)
  end

  def create
    id = ids.build(id_params)

    if id.save
      render_success :ok, message: 'Additional ID created.', json: id_props(id)
    else
      render_error :unprocessable_entity, errors: id
    end
  end

  def update
    if id.update(id_params)
      render_success :ok, message: 'Additional ID updated.', json: id_props(id)
    else
      render_error :unprocessable_entity, errors: id
    end
  end

  def destroy
    if id.destroy
      render_success :ok, message: 'Additional ID deleted.'
    else
      render_error :unprocessable_entity, errors: id
    end
  end

  def available
    render_success :ok, json: employee.available_ids(params[:types] || [])
  end

  private
    def permissions
      if [:index, :show, :available].include?(action_name.to_sym)
        ['read', 'write', 'manage']
      else
        ['write', 'manage']
      end
    end

    def employee
      @employee ||= current_school.employees.find_by(id: params[:employee_id])
    end

    def ids
      employee.additional_ids
    end

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

    def id_params
      params.permit(:number, :code)
    end

    def id_props(id)
      {
        id: id.id,
        code: id.code,
        number: id.number,
        full_name: employee.full_name
      }
    end
end
