class window.SubmissionCtrl extends BaseCtrl
    constructor: (@$rootScope, @$scope, @$state, @$injector, @Dock, @Cookies, @Constants, @Coupons, @MixPanel) ->
        super()

        console.log " has cookie " +@Cookies.getItem('sr_token') if DEBUG
        console.log "has board is " +@Dock.hasBoard() if DEBUG

        if not @Dock.hasBoard() or not @Dock.photo or not @Dock.hasUser() or not @Dock.hasUserToken()
            @$state.go(@Constants.routes.home)
        else
            @watchUploadProgress()
        @$rootScope.hideNavbar = false
        @$rootScope.hideButtons = true

    watchUploadProgress: =>
        if @Dock.data.imageUploadError is true
            @$state.go(@Constants.routes.error)

        #check if the image has finished uploading
        console.log "checking image upload" if DEBUG
        console.log @Dock.data.url if DEBUG

        @$scope.$watch "submission.Dock.data.url", (newVal, oldVal) =>
            console.log "image uploaded: #{newVal}, #{oldVal}" if DEBUG
            if newVal? and newVal.length > 10
                console.log "image upload finished" if DEBUG
                @saveEntry()

        @$scope.$watch "submission.Dock.data.imageUploadError", (newVal, oldVal) =>
            console.log "image upload error: #{newVal}, #{oldVal}" if DEBUG
            if newVal is true
                console.log "image upload failed" if DEBUG
                @$state.go(@Constants.routes.error)

    goToConfirmation: ->
        @$state.go(@Constants.routes.confirmation, {boardId: @boardId})

    saveEntry: =>
        params = @Dock.getEntry()
        # params = $.extend({}, params, @Dock.data.uploadForm) if @Dock.data.uploadForm?
        if @Dock.data.uploadForm?
            params['transloadit'] = @Dock.data.uploadForm['transloadit']
            params['type'] = 'social_video'
        if @Dock.data.uploadFormImg?
            params['transloadit'] = @Dock.data.uploadFormImg['transloadit']
        @Entries = @$injector.get("Entries")
        @Entries.save({boardId: @Dock.data.board.id }, params, @onSaveEntry, @onEntryError)

    onSaveEntry: (data, headers) =>
        console.log "entry saved successfully" if DEBUG
        console.log data if DEBUG
        @MixPanel.trackEntrySubmitted()
        @Dock.setCoupon(data.coupon)
        @Dock.setEntryId(data)
        if headers('X-Message-Type')
          @$rootScope.flashText = @decodeMessage(headers)
          @$rootScope.flashType = headers('X-Message-Type')
        @goToConfirmation()

    onEntryError: (data) =>
        console.log "saving entry failed" if DEBUG
        console.log data if DEBUG
        @$state.go(@Constants.routes.error)


SubmissionCtrl.$inject = ["$rootScope", "$scope", "$state", "$injector", "Dock", "Cookies", "Constants", "Coupons", "MixPanel"]

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