class window.ViewPhotoController extends BaseCtrl
  constructor: (@$scope, @$rootScope, @Dock, @Constants, @$state, @Analytics, @$injector, @$modal) ->
    super()
    @getSite()
    @entryId = @$stateParams.entryId
    # @getBoard()
    @commentText = ''
    @getEntry()
    @commentPage = 1
    @nextCommentPage()
    if @Dock.hasUser() && @Dock.hasUserToken()
      @commentFormVisible = true

    @voteInstant = @$stateParams.vote_instant
    if @voteInstant && !@Dock.votingInProgress
      @Dock.votingInProgress = true
      @vote()


  getBoard: =>
    @Board = @$injector.get("Board")
    @Board.get({id: @boardId}, @onGetBoard, @onSiteError)

  isPhoto: =>
    @Dock.data.entry? && @Dock.data.entry.details.type == "photo"

  isText: =>
    @Dock.data.entry? && @Dock.data.entry.details.type == "text"

  isVideo: =>
    @Dock.data.entry? && @Dock.data.entry.details.type == "social_video"

  hasStatistics: ->
    @Dock.data.entry? && (@Dock.data.entry.statistics.shares || @Dock.data.entry.statistics.comments || @Dock.data.entry.statistics.likes)

  getEntry: =>
    @Entry = @$injector.get("Entry")
    @Entry.query({id: @entryId}, @onGetEntry, @onSiteError)

  onGetBoard: (data) =>
    @Dock.setBoard(data)
    @$rootScope.description = @Dock.data.board.description

  onBoardError: (error) =>
    console.log "error is #{error}" if DEBUG
    @showError()

  onGetEntry: (data) =>
    @Dock.setEntry data
    @boardId = data.board_slug
    @getBoard()

  onEntryError: (error) =>
    console.log "error is #{error}" if DEBUG
    @showError()

  gotoSignIn: ->
    @$rootScope.returnTo =
      route: @Constants.routes.viewPhoto
      params:
        boardId: @boardId,
        entryId: @entryId
    @$state.go(@Constants.routes.signin)

  submitComment: =>
    console.log "commentText = ", @commentText if DEBUG
    @Comments = @$injector.get("Comments")
    params =
      content: @commentText
    @Comments.save {entryId: @entryId}, params, (data, headers) =>
      @comments ||= []
      @comments.push data.comment
      @commentText = ''
      if headers('X-Message-Type')
        text = @decodeMessage(headers)
        type = headers('X-Message-Type')
        @$modal.open
          templateUrl: "@@host/views/alert-#{type}.html",
          controller: 'ModalInstanceController',
          resolve:
            text: -> text
            header: -> false
    , (error) =>
      @commentError = error.data.errors.content[0]

  nextCommentPage: =>
    unless @pageRequestProcessing or @noMoreComments
      @requestCommentPage()

  requestCommentPage: =>
    @pageRequestProcessing = true
    @Comments = @$injector.get("Comments")
    @Comments.query
      entryId: @entryId
      page: @commentPage
    , (data) =>
      if data.length
        @commentPage = @commentPage + 1
      else
        @noMoreComments = true
      @pageRequestProcessing = false
      if @comments? && @comments.length
        @comments = @comments.concat data
      else
        @comments = data

  formatCreatedAt: ->
    moment(@Dock.data.entry.details.created_at).format('D MMM YY') if @Dock.data.entry?

  startShare: ->
    @$rootScope.returnTo =
      route: @Constants.routes.viewPhoto
      params:
        boardId: @boardId,
        entryId: @entryId
    @$state.go(@Constants.routes.share, {entryId: @entryId, boardId: @boardId})

  vote: ->
    if @Dock.hasUser() && @Dock.hasUserToken() && !@Dock.data.restrict_api_access
      @Entry = @$injector.get("Entry")
      new @Entry(id: @entryId).$vote {}, (data, headers) =>
        @$rootScope.shareText = ''
        if headers('X-Message-Type')
          @Dock.messages =
            text: @decodeMessage(headers)
            type: headers('X-Message-Type')
        @Dock.votingInProgress = false
        modalInstance = @$modal.open
          templateUrl: "@@host/views/alert-notice.html",
          controller: 'ModalInstanceController',
          resolve:
            text: -> 'Thank you for your vote! Why not share this entry with your friends?'
            header: -> 'Thanks for voting!'

        @startShare()
      , (data) =>
        if data.headers('X-Message-Type')
          text = @decodeMessage(data.headers)
          type = data.headers('X-Message-Type')
          modalInstance = @$modal.open
            templateUrl: "@@host/views/alert-#{type}.html",
            controller: 'ModalInstanceController',
            resolve:
              text: -> text
              header: -> false
          @Dock.votingInProgress = false


    else
      @$rootScope.returnTo =
        route: @Constants.routes.vote_instant
        params:
          boardId: @boardId,
          entryId: @entryId,
          vote_instant: true
      @$state.go(@Constants.routes.signin, { publish: 'vote' });

ViewPhotoController.$inject = ["$scope", "$rootScope", "Dock", "Constants", "$state", "Analytics", "$injector", "$modal"]

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