<ModalDialog :label :shown :closed :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'

export default {
  computed: {
    relationship: ($currentAccountRelationship) => $currentAccountRelationship,
    account: ($currentAccountProfile) => $currentAccountProfile,
    verifyCredentials: ($currentVerifyCredentials) => $currentVerifyCredentials,
    verifyCredentialsId: (verifyCredentials) => verifyCredentials.id,
    following: (relationship) => relationship && relationship.following,
    followRequested: (relationship) => relationship && relationship.requested,
    accountName: (account) => account && (account.display_name || account.acct),
    accountId: (account) => account && account.id,
    followLabel: (following, followRequested, accountName) => {
      if (typeof following === 'undefined' || !accountName) {
        return ''
      }
      return (following || followRequested)
        ? `Unfollow ${accountName}`
        : `Follow ${accountName}`
    },
    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: {
    async show() {
      this.set({shown: true})
    },
    async onClick(item) {
      if (item.key === 'follow') {
        let accountId = this.get('accountId')
        let following = this.get('following')
        await setAccountFollowed(accountId, !following, true)
        this.set({closed: true})
      } else if (item.key === 'delete') {
        let statusId = this.get('statusId')
        await doDeleteStatus(statusId)
        this.set({closed: true})
      }
    }
  }
}
</script>