class Dock
    constructor: () ->
        @data = {}
        @siteData = {}
        @boardList = []
        @photo = {}

    setData: (data) ->
        console.log "updating entry" if DEBUG
        @data = data

    getData: () ->
        console.log "returning entry" if DEBUG
        @data

    setSiteData: (data) ->
        @siteData = data

    hasSiteData: ->
        !!@siteData.id

    setName: (name) ->
        @data.name = name

    setPhotoUrl: () ->
        @data.url = @getStorageReadPrefix()+'/'+@data.board.storage.key

    hideMessages: ->
      delete @messages

    setDescription: (desc) ->
        @data.desc = desc

    setCoupon: (coupon) =>
        @data.coupon = coupon

    getCouponId: ->
        if @data.coupon? then @data.coupon.id else null

    hasCoupon: =>
        console.log "hasCoupon is #{!!@data.coupon}" if DEBUG
        !!@data.coupon

    hasBoard: ->
        !!@data.board

    hasUser: ->
        !!@data.userInfo

    removeUserInfo: ->
        @data.userInfo = {}

    getUserInfo: ->
        formData =
            first_name: @data.userInfo.first_name
            last_name: @data.userInfo.last_name
            email: @data.userInfo.email
            subscribed: @data.userInfo.subscribed
        console.log 'getUserInfo will return', formData
        formData

    setUserToken: (token) ->
      @data.userToken = token

    setApiRestriction: (api_restriction) ->
      @data.restrict_api_access = api_restriction

    getApiRestriction: ->
      @data.restrict_api_access

    getUserToken: =>
      console.log "We were asked about user token, it's ", @data.userToken if DEBUG
      @data.userToken

    removeUserToken: ->
        @data.userToken = ""

    hasUserToken: ->
        !!@data.userToken

    isManager: ->
        return if not @hasUser() || not @data.userInfo.access
        $.inArray(@data.userInfo.access.role, ['manager', 'multi_manager', 'superuser']) > -1


    hasUserName: ->
        hasUsername = true if @data.userInfo?.first_name?
        console.log "hasUsername is #{hasUsername}" if DEBUG
        hasUsername

    hasEmail: ->
        hasEmail = true if @data.userInfo?.email?
        console.log "hasEmail is #{hasEmail}" if DEBUG
        hasEmail

    removeUserData: ->
        @data = {}
        @photo = {}

    removeEntry: ->
        @photo = {}
        @data.coupon = {}
        @data.url = ''
        @data.name = ''
        @data.desc = ''
        @data.board = {}
        @data.imageUploaded = false
        @data.imageSubmitted = false
        @data.entryId = ''

    imageSubmitted: =>
        console.log "@data.imageSubmitted is #{@data.imageSubmitted}" if DEBUG
        @data.imageSubmitted

    resetImageSubmitted: =>
      @data.imageSubmitted = false

    imageUploaded: ->
        @data.imageUploaded

    setBoardFromId: (boardId) ->
        if !@boardList
            return null
        board = (board for board in @boardList when board.id is boardId)[0]
        @data.board = angular.copy(board)

    setBoard: (board) ->
        @data.board = board

    setEntries: (entries) ->
      if @data.board.entries? && @data.board.entries.length > 0
        @data.board.entries = @data.board.entries.concat entries
      else
        @data.board.entries = entries

    setEntry: (entry) ->
      @data.entry = entry

    getEntries: ->
      return [] unless @data? && @data.board?
      @data.board.entries

    setBoardList: (boardList) ->
        @boardList = boardList

    getNumberOfBoards: ->
        if @boardList
            return @boardList.length
        else
            return 0

    setUserInfo: (userInfo) ->
        @data.userInfo = userInfo

    getAWSParams: (contentType) ->
        console.log "getting form data" if DEBUG
        formData =
            key: @data.board.storage.key
            AWSAccessKeyId: @data.board.storage.access_key
            acl: @data.board.storage.acl
            policy: @data.board.storage.policy
            signature: @data.board.storage.signature
            "Content-Type": contentType
        formData

    getHost: () ->
        @data.board.storage.host

    getStorageReadPrefix: () ->
        @data.board.storage.read_prefix

    getEntry: () ->
        params =
            name: @data.name
            description: @data.desc
            image_url: @data.url
            type: 'photo'
            #user_id: if @data.userInfo.id? then @data.userInfo.id else "0"

    setEntryId: (data) ->
        @data.entryId = data.id

    getEntryId: ->
        @data.entryId

    hasEntryId: ->
        !!@data.entryId

    getEmailAddress: () ->
        params =
            email: @data.userInfo.emailAddress

angular.module("shuttlerockApp").service("Dock", Dock)