class window.AuthCtrl extends BaseCtrl
    constructor: () ->
        super()

    getToken: =>
        console.log "getting token " if DEBUG
        params = {email: @Dock.data.userInfo.email, password: @Dock.data.userInfo.password}
        @Token.save({}, params, @onToken, @onTokenError)

    onToken: (data) =>
        console.log "got token "+data.token if DEBUG
        @Dock.setUserToken('token '+data.token)
        @Dock.setApiRestriction(data.restrict_api_access)
        #don't set the cookie just yet, in case updating the user doesn't work
        @updateUser('token '+data.token)
        @Dock.data.userInfo.password = ''

    updateUser: (token) =>
        console.log "Authentication#updateUser enter"
        params = @Dock.getUserInfo()
        console.log "params = ", params
        #can't use $resource here, need a fresh instance now that we have token
        @$http.put("#{apiPrefix}/v2/me.json", params, {headers: {'Authorization': token}})
        .success (data) =>
            @onUpdateUser(data)
        .error (error, status) =>
            @onUpdateUserError(error, status)

    onUpdateUser: (data) =>
        console.log "Authentication#onUpdateUser", data
        @Cookies.setItem('sr_token', @Dock.getUserToken(), 31536e3, '/')
        @Cookies.setItem('sr_restricted_api', @Dock.getApiRestriction(), 31536e3, '/')
        @Dock.setUserInfo(data)
        @MixPanel = @$injector.get("MixPanel") #make sure to have $injector injected in child class
        @MixPanel.userSignup(data)
        @$state.go(@Constants.routes.submission, {boardId: @boardId});


    formatErrors: (errors) ->
        console.log errors if DEBUG
        message = []
        if @isArray(errors)
            console.log 'is array' if DEBUG
        else
            console.log 'is object' if DEBUG
            angular.forEach errors, ((value, key) ->
                @push(key + ": " + value)
            ), message

        console.log message if DEBUG
        message

angular.module("shuttlerockApp").controller("AuthCtrl", AuthCtrl)