 class @Todos
+  PER_PAGE = 20
+
   constructor: (@name) ->
     @clearListeners()
     @initBtnListeners()

      dataType: 'json'
      data: '_method': 'delete'
      success: (data) =>
        @clearDone $this.closest('li')
        @updateBadges data


  updateBadges: (data) ->
    $('.todos-pending .badge, .todos-pending-count').text data.count
    $('.todos-done .badge').text data.done_count

  getRenderedPages: ->
    $('.gl-pagination .page').length

  getCurrentPage: ->
    parseInt($.trim($('.gl-pagination .page.active').text()))

  redirectIfNeeded: (total) ->
    currPages = @getRenderedPages()
    currPage = @getCurrentPage()

    newPages = Math.ceil(total / PER_PAGE)
    url = location.href # Includes query strings

    # Refresh if no remaining Todos
    if !total
      location.reload()
      return

    # Do nothing if no pagination
    return if !currPages

    # If new total of pages if different than we have now
    if newPages isnt currPages
      # Redirect to previous page if there´s one available
      if currPages > 1 and currPage is currPages
        url = @updateQueryStringParameter(url, 'page', currPages - 1)

      location.replace url

  updateQueryStringParameter: (uri, key, value) ->
    separator = if uri.indexOf('?') isnt -1 then "&" else "?"

    # Matches key and value
    regex = new RegExp("([?&])" + key + "=.*?(&|#|$)", "i")

    if uri.match(regex)
      return uri.replace(regex, '$1' + key + "=" + value + '$2')

    uri + separator + key + "=" + value
