<div class="status-toolbar {{isStatusInOwnThread ? 'status-in-own-thread' : ''}}">
  <IconButton
    label="Reply"
    href="#fa-reply"
    />
  <IconButton
    label="{{reblogLabel}}"
    pressable="{{!reblogDisabled}}"
    pressed="{{reblogged}}"
    disabled="{{reblogDisabled}}"
    href="{{reblogIcon}}"
    delegateKey="{{reblogKey}}"
    ref:reblogNode
  />
  <IconButton
    label="Favorite"
    pressable="true"
    pressed="{{favorited}}"
    href="#fa-star"
    delegateKey="{{favoriteKey}}"
    ref:favoriteNode
    />
  <IconButton
    label="Show more actions"
    href="#fa-ellipsis-h"
  />
</div>
<style>
  .status-toolbar {
    grid-area: toolbar;
    display: flex;
    justify-content: space-between;
  }
  .status-toolbar.status-in-own-thread {
    margin-left: 58px;
  }
</style>
<script>
  import IconButton from '../IconButton.html'
  import { store } from '../../_store/store'
  import { registerClickDelegate, unregisterClickDelegate } from '../../_utils/delegate'
  import { setFavorited } from '../../_actions/favorite'
  import { setReblogged } from '../../_actions/reblog'

  export default {
    oncreate() {
      this.onFavoriteClick = this.onFavoriteClick.bind(this)
      this.onReblogClick = this.onReblogClick.bind(this)

      registerClickDelegate(this.get('favoriteKey'), this.onFavoriteClick)
      registerClickDelegate(this.get('reblogKey'), this.onReblogClick)
    },
    ondestroy() {
      unregisterClickDelegate(this.get('favoriteKey'))
      unregisterClickDelegate(this.get('reblogKey'))
    },
    components: {
      IconButton
    },
    store: () => store,
    methods: {
      onFavoriteClick() {
        let statusId = this.get('statusId')
        let favorited = this.get('favorited')
        /* no await */ setFavorited(statusId, !favorited)
      },
      onReblogClick() {
        let statusId = this.get('statusId')
        let reblogged = this.get('reblogged')
        /* no await */ setReblogged(statusId, !reblogged)
      }
    },
    computed: {
      visibility: (status) => status.visibility,
      reblogLabel: (visibility) => {
        switch (visibility) {
          case 'private':
            return 'Cannot be boosted because this is followers-only'
          case 'direct':
            return 'Cannot be boosted because this is a direct message'
          default:
            return 'Boost'
        }
      },
      reblogIcon: (visibility) => {
        switch (visibility) {
          case 'private':
            return '#fa-lock'
          case 'direct':
            return '#fa-envelope'
          default:
            return '#fa-retweet'
        }
      },
      reblogDisabled: (visibility) => {
        return visibility === 'private' || visibility === 'direct'
      },
      reblogged: (status, $currentStatusModifications) => {
        if ($currentStatusModifications && status.id in $currentStatusModifications.reblogs) {
          return $currentStatusModifications.reblogs[status.id]
        }
        return status.reblogged
      },
      favorited: (status, $currentStatusModifications) => {
        if ($currentStatusModifications && status.id in $currentStatusModifications.favorites) {
          return $currentStatusModifications.favorites[status.id]
        }
        return status.favourited
      },
      statusId: (status) => status.id,
      favoriteKey: (statusId, timelineType, timelineValue) => `fav-${timelineType}-${timelineValue}-${statusId}`,
      reblogKey: (statusId, timelineType, timelineValue) => `reblog-${timelineType}-${timelineValue}-${statusId}`,
    }
  }
</script>