/* eslint-disable
    max-len,
    no-return-assign,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
 * decaffeinate suggestions:
 * DS102: Remove unnecessary code created because of implicit returns
 * DS103: Rewrite code to no longer use __guard__
 * DS207: Consider shorter variations of null checks
 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
 */
import App from '../../../base'

export default App.controller('ChatButtonController', function ($scope, ide) {
  let clearNewMessageNotification
  $scope.toggleChat = function () {
    $scope.ui.chatOpen = !$scope.ui.chatOpen
    return $scope.resetUnreadMessages()
  }

  $scope.unreadMessages = 0
  $scope.resetUnreadMessages = () => ($scope.unreadMessages = 0)

  $scope.$on('chat:resetUnreadMessages', e => $scope.resetUnreadMessages())

  function handleNewMessage(message) {
    if (message != null) {
      if (
        __guard__(message != null ? message.user : undefined, x => x.id) !==
        ide.$scope.user.id
      ) {
        if (!$scope.ui.chatOpen) {
          $scope.$applyAsync(() => {
            $scope.unreadMessages += 1
          })
        }
        flashTitle()
      }
    }
  }

  $scope.$on('chat:newMessage', (e, message) => handleNewMessage(message))
  window.addEventListener('Chat.MessageReceived', ({ detail: { message } }) =>
    handleNewMessage(message)
  )

  let focussed = true
  let newMessageNotificationTimeout = null
  let originalTitle = null
  $(window).on('focus', function () {
    clearNewMessageNotification()
    return (focussed = true)
  })
  $(window).on('blur', () => (focussed = false))

  var flashTitle = function () {
    if (!focussed && newMessageNotificationTimeout == null) {
      let changeTitle
      if (!originalTitle) {
        originalTitle = window.document.title
      }
      return (changeTitle = () => {
        if (window.document.title === originalTitle) {
          window.document.title = 'New Message'
        } else {
          window.document.title = originalTitle
        }
        return (newMessageNotificationTimeout = setTimeout(changeTitle, 800))
      })()
    }
  }

  return (clearNewMessageNotification = function () {
    clearTimeout(newMessageNotificationTimeout)
    newMessageNotificationTimeout = null
    if (originalTitle != null) {
      return (window.document.title = originalTitle)
    }
  })
})

function __guard__(value, transform) {
  return typeof value !== 'undefined' && value !== null
    ? transform(value)
    : undefined
}
