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

const {
  draftKey,
  placeholder = 'What is on your mind?',
  inReplyToId,
} = defineProps<{
  draftKey: string
  placeholder?: string
  inReplyToId?: string
}>()

let isSending = $ref(false)
const storageKey = `nuxtodon-draft-${draftKey}`
function getDefaultStatus(): CreateStatusParamsWithStatus {
  return {
    status: '',
    inReplyToId,
  }
}
const draft = useLocalStorage<CreateStatusParamsWithStatus>(storageKey, getDefaultStatus())

async function publish() {
  try {
    isSending = true
    await masto.statuses.create(draft.value)
    draft.value = getDefaultStatus()
  }
  finally {
    isSending = false
  }
}

onUnmounted(() => {
  if (!draft.value.status) {
    draft.value = undefined
    nextTick(() => {
      localStorage.removeItem(storageKey)
    })
  }
})
</script>

<template>
  <div
    flex flex-col gap-4
    :class="isSending ? 'pointer-events-none' : ''"
  >
    <textarea
      v-model="draft.status"
      :placeholder="placeholder"
      p2 border-rounded w-full h-40
      bg-gray:10 outline-none border="~ base"
    />
    <div flex justify-end>
      <button
        btn-solid
        :disabled="!draft.status"
        @click="publish"
      >
        Publish!
      </button>
    </div>
  </div>
</template>