<ModalDialog
  :id
  :label
  :title
  background="var(--main-bg)"
>
  <GenericDialogList :items on:click="onClick(event)"/>
</ModalDialog>
<script>
import ModalDialog from './ModalDialog.html'
import { store } from '../../../_store/store'
import GenericDialogList from './GenericDialogList.html'
import { setAccountFollowed } from '../../../_actions/follow'
import { doDeleteStatus } from '../../../_actions/delete'
import { show } from '../helpers/showDialog'
import { close } from '../helpers/closeDialog'
import { oncreate } from '../helpers/onCreateDialog'

export default {
  oncreate,
  computed: {
    relationship: ($currentAccountRelationship) => $currentAccountRelationship,
    account: ($currentAccountProfile) => $currentAccountProfile,
    verifyCredentials: ($currentVerifyCredentials) => $currentVerifyCredentials,
    verifyCredentialsId: (verifyCredentials) => verifyCredentials.id,
    following: (relationship) => relationship && relationship.following,
    followRequested: (relationship) => relationship && relationship.requested,
    accountId: (account) => account && account.id,
    followLabel: (following, followRequested, account) => {
      if (typeof following === 'undefined' || !account) {
        return ''
      }
      return (following || followRequested)
        ? `Unfollow @${account.acct}`
        : `Follow @${account.acct}`
    },
    items: (followLabel, following, followRequested, accountId, verifyCredentialsId) => (
      [
        accountId !== verifyCredentialsId &&
        {
          key: 'follow',
          label: followLabel,
          icon: following ? '#fa-user-times' : followRequested ? '#fa-hourglass' : '#fa-user-plus'
        },
        accountId === verifyCredentialsId &&
        {
          key: 'delete',
          label: 'Delete',
          icon: '#fa-trash'
        }
      ].filter(Boolean)
    )
  },
  components: {
    ModalDialog,
    GenericDialogList
  },
  store: () => store,
  methods: {
    show,
    close,
    async onClick(item) {
      if (item.key === 'follow') {
        let accountId = this.get('accountId')
        let following = this.get('following')
        await setAccountFollowed(accountId, !following, true)
        this.close()
      } else if (item.key === 'delete') {
        let statusId = this.get('statusId')
        await doDeleteStatus(statusId)
        this.close()
      }
    }
  }
}
</script>