/* eslint-disable
    camelcase,
    max-len,
    no-return-assign,
    no-undef,
    no-unused-vars,
*/
// 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
 * DS207: Consider shorter variations of null checks
 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
 */
define(['base'], function(App) {
  App.controller('AccountSettingsController', function(
    $scope,
    $http,
    $modal,
    event_tracking,
    UserAffiliationsDataService,
    UserOauthDataService
  ) {
    $scope.subscribed = true

    $scope.unsubscribe = function() {
      $scope.unsubscribing = true
      return $http({
        method: 'DELETE',
        url: '/user/newsletter/unsubscribe',
        headers: {
          'X-CSRF-Token': window.csrfToken
        }
      })
        .then(function() {
          $scope.unsubscribing = false
          return ($scope.subscribed = false)
        })
        .catch(() => ($scope.unsubscribing = true))
    }

    $scope.deleteAccount = function() {
      let modalInstance
      return (modalInstance = $modal.open({
        templateUrl: 'deleteAccountModalTemplate',
        controller: 'DeleteAccountModalController',
        resolve: {
          userDefaultEmail() {
            return UserAffiliationsDataService.getUserDefaultEmail()
              .then(
                defaultEmailDetails =>
                  (defaultEmailDetails != null
                    ? defaultEmailDetails.email
                    : undefined) || null
              )
              .catch(() => null)
          }
        }
      }))
    }

    return ($scope.upgradeIntegration = service =>
      event_tracking.send('subscription-funnel', 'settings-page', service))
  })

  return App.controller('DeleteAccountModalController', function(
    $scope,
    $modalInstance,
    $timeout,
    $http,
    userDefaultEmail
  ) {
    $scope.state = {
      isValid: false,
      deleteText: '',
      password: '',
      confirmV1Purge: false,
      confirmSharelatexDelete: false,
      inflight: false,
      error: null
    }

    $scope.userDefaultEmail = userDefaultEmail

    $modalInstance.opened.then(() =>
      $timeout(() => $scope.$broadcast('open'), 700)
    )

    $scope.checkValidation = () =>
      ($scope.state.isValid =
        userDefaultEmail != null &&
        $scope.state.deleteText.toLowerCase() ===
          userDefaultEmail.toLowerCase() &&
        $scope.state.password.length > 0 &&
        $scope.state.confirmV1Purge &&
        $scope.state.confirmSharelatexDelete)

    $scope.delete = function() {
      $scope.state.inflight = true
      $scope.state.error = null
      return $http({
        method: 'POST',
        url: '/user/delete',
        headers: {
          'X-CSRF-Token': window.csrfToken,
          'Content-Type': 'application/json'
        },
        data: {
          password: $scope.state.password
        },
        disableAutoLoginRedirect: true // we want to handle errors ourselves
      })
        .then(function() {
          $modalInstance.close()
          $scope.state.inflight = false
          $scope.state.error = null
          return setTimeout(() => (window.location = '/login'), 1000)
        })
        .catch(function(response) {
          const { data, status } = response
          $scope.state.inflight = false
          if (status === 403) {
            $scope.state.error = { code: 'InvalidCredentialsError' }
          } else {
            $scope.state.error = { code: data.error }
          }
        })
    }

    return ($scope.cancel = () => $modalInstance.dismiss('cancel'))
  })
})
