define(['base'], App =>
  App.controller('UserOauthController', function(
    $http,
    $scope,
    $q,
    _,
    UserOauthDataService
  ) {
    const _reset = function() {
      $scope.ui = {
        hasError: false,
        errorMessage: '',
        isLoadingV1Ids: false
      }
      $scope.providers = window.oauthProviders
      $scope.thirdPartyIds = window.thirdPartyIds
    }
    const _unlinkError = (providerId, err) => {
      $scope.providers[providerId].ui.hasError = true
      $scope.providers[providerId].ui.errorMessage =
        err && err.data && err.data.message ? err.data.message : 'error'
    }

    $scope.unlink = providerId => {
      if (window.ExposedSettings.isOverleaf) {
        // UI
        $scope.providers[providerId].ui = {
          hasError: false,
          isProcessing: true
        }
        // Data for update
        const data = {
          _csrf: window.csrfToken,
          link: false,
          providerId
        }
        $http
          .post('/user/oauth-unlink', data)
          .catch(error => {
            $scope.providers[providerId].ui.isProcessing = false
            _unlinkError(providerId, error)
          })
          .then(response => {
            $scope.providers[providerId].ui.isProcessing = false
            if (response.status === 200) {
              $scope.thirdPartyIds[providerId] = null
            } else {
              _unlinkError(providerId, response)
            }
          })
      }
    }

    _reset()
  }))
