<script setup lang="ts">
import type { Account } from 'masto'

const { account } = defineProps<{
  account: Account
}>()
let relationship = $(useRelationship(account))

const isSelf = $computed(() => currentUser.value?.account.id === account.id)

const toggleMute = async () => {
  // TODO: Add confirmation

  relationship!.muting = !relationship!.muting
  relationship = relationship!.muting
    ? await useMasto().accounts.mute(account.id, {
      // TODO support more options
    })
    : await useMasto().accounts.unmute(account.id)
}

const toggleBlockUser = async () => {
  // TODO: Add confirmation

  relationship!.blocking = !relationship!.blocking
  relationship = await useMasto().accounts[relationship!.blocking ? 'block' : 'unblock'](account.id)
}

const toggleBlockDomain = async () => {
  // TODO: Add confirmation

  relationship!.domainBlocking = !relationship!.domainBlocking
  await useMasto().domainBlocks[relationship!.domainBlocking ? 'block' : 'unblock'](getServerName(account))
}
</script>

<template>
  <CommonDropdown>
    <button flex gap-1 items-center w-full rounded op75 hover="op100 text-purple" group>
      <div rounded-5 p2 group-hover="bg-purple/10">
        <div i-ri:more-2-fill />
      </div>
    </button>

    <template #popper>
      <NuxtLink :to="account.url" target="_blank">
        <CommonDropdownItem icon="i-ri:arrow-right-up-line">
          Open in original site
        </CommonDropdownItem>
      </NuxtLink>

      <template v-if="!isSelf">
        <CommonDropdownItem icon="i-ri:at-line" @click="mentionUser(account)">
          Mention @{{ account.acct }}
        </CommonDropdownItem>
        <CommonDropdownItem icon="i-ri:message-3-line" @click="directMessageUser(account)">
          Direct message @{{ account.acct }}
        </CommonDropdownItem>

        <CommonDropdownItem v-if="!relationship?.muting" icon="i-ri:volume-up-fill" @click="toggleMute">
          Mute @{{ account.acct }}
        </CommonDropdownItem>
        <CommonDropdownItem v-else icon="i-ri:volume-mute-line" @click="toggleMute">
          Unmute @{{ account.acct }}
        </CommonDropdownItem>

        <CommonDropdownItem v-if="!relationship?.blocking" icon="i-ri:forbid-2-line" @click="toggleBlockUser">
          Block @{{ account.acct }}
        </CommonDropdownItem>
        <CommonDropdownItem v-else icon="i-ri:checkbox-circle-line" @click="toggleBlockUser">
          Unblock @{{ account.acct }}
        </CommonDropdownItem>

        <CommonDropdownItem
          v-if="!relationship?.domainBlocking"
          icon="i-ri:shut-down-line"
          @click="toggleBlockDomain"
        >
          Block domain {{ getServerName(account) }}
        </CommonDropdownItem>
        <CommonDropdownItem v-else icon="i-ri:restart-line" @click="toggleBlockDomain">
          Unblock domain {{ getServerName(account) }}
        </CommonDropdownItem>
      </template>

      <template v-else>
        <NuxtLink to="/pinned">
          <CommonDropdownItem icon="i-ri:pushpin-line">
            Pinned
          </CommonDropdownItem>
        </NuxtLink>
        <NuxtLink to="/favourites">
          <CommonDropdownItem icon="i-ri:heart-3-line">
            Favourites
          </CommonDropdownItem>
        </NuxtLink>
        <NuxtLink to="/mutes">
          <CommonDropdownItem icon="i-ri:volume-mute-line">
            Muted users
          </CommonDropdownItem>
        </NuxtLink>
        <NuxtLink to="/blocks">
          <CommonDropdownItem icon="i-ri:forbid-2-line">
            Blocked users
          </CommonDropdownItem>
        </NuxtLink>
        <NuxtLink to="/domain_blocks">
          <CommonDropdownItem icon="i-ri:shut-down-line">
            Blocked domains
          </CommonDropdownItem>
        </NuxtLink>
      </template>
    </template>
  </CommonDropdown>
</template>