<script setup lang="ts">
import { useAccountSetupStoreOrThrow } from '../../composables/useAccountSetupStore'

const { t } = useI18n()

const { loadSetupApps, emailConfigured, storageConfigured, listModalDlg } = useAccountSetupStoreOrThrow()

const { appInfo } = useGlobal()

const openedCategory = ref<string | null>(null)

const configs = computed(() => [
  {
    title: t('labels.setupLabel', { label: t('labels.email') }),
    key: 'email',
    description: 'Configure an email account to send system notifications to your organisation’s users.',
    docsLink: '',
    buttonClick: () => {
      // listModalDlg.value = true
      // openedCategory.value = 'Email'
      navigateTo(`/account/setup/email${emailConfigured.value ? `/${emailConfigured.value.title}` : ''}`)
    },
    itemClick: () => {
      navigateTo(`/account/setup/email`)
    },
    configured: emailConfigured.value,
  },
  {
    title: t('labels.setupLabel', { label: t('labels.storage') }),
    key: 'storage',
    description: 'Configure a storage service to store your organisation’s data.',
    docsLink: '',
    buttonClick: () => {
      // listModalDlg.value = true
      // openedCategory.value = 'Storage'

      navigateTo(`/account/setup/storage${storageConfigured.value ? `/${storageConfigured.value.title}` : ''}`)
    },
    itemClick: () => {
      navigateTo(`/account/setup/storage`)
    },
    configured: storageConfigured.value,
  },
  {
    title: t('labels.switchToProd'),
    key: 'switchToProd',
    description: 'Configure a production-ready app database to port from the existing built-in application database.',
    docsLink: '',
    buttonClick: () => {
      //  TODO: Implement the logic to switch to production
    },
    isPending: !(appInfo.value as any)?.prodReady,
  },
])

onMounted(async () => {
  await loadSetupApps()
})
</script>

<template>
  <div class="flex flex-col" data-test-id="nc-setup">
    <NcPageHeader>
      <template #icon>
        <div class="flex justify-center items-center h-5 w-5">
          <GeneralIcon icon="ncSliders" class="flex-none text-[20px]" />
        </div>
      </template>
      <template #title>
        <span data-rec="true">
          {{ $t('labels.setup') }}
        </span>
      </template>
    </NcPageHeader>

    <div
      class="nc-content-max-w flex-1 max-h-[calc(100vh_-_100px)] overflow-y-auto nc-scrollbar-thin flex flex-col items-center gap-6 p-6"
    >
      <div class="flex flex-col gap-6 w-150">
        <div
          v-for="config of configs"
          class="flex flex-col border-1 rounded-2xl border-gray-200 p-6 gap-2"
          :class="{
            'cursor-pointer': config.itemClick,
          }"
          @click="config.itemClick"
        >
          <div class="flex gap-3 items-center" data-rec="true">
            <NcTooltip v-if="!config.configured || config.isPending">
              <template #title>
                <span>
                  {{ $t('activity.pending') }}
                </span>
              </template>
              <GeneralIcon icon="warning" class="text-orange-500 -mt-1 w-6 h-6" />
            </NcTooltip>
            <GeneralIcon v-else icon="circleCheckSolid" class="text-success w-6 h-6 bg-white-500" />

            <span class="font-bold text-base"> {{ config.title }}</span>
          </div>
          <div class="text-gray-600 text-sm">{{ config.description }}</div>

          <div class="flex justify-between mt-4">
            <NcButton size="small" type="text">
              <div class="flex gap-2 items-center">
                Go to docs
                <GeneralIcon icon="ncExternalLink" />
              </div>
            </NcButton>
            <NcButton v-if="config.configured" size="small" type="text" @click.stop="config.buttonClick">
              <div class="flex gap-2 items-center">
                <GeneralIcon icon="ncEdit3" />
                Edit
              </div>
            </NcButton>
            <NcButton v-else size="small" @click.stop="config.buttonClick">Configure</NcButton>
          </div>
        </div>
      </div>
    </div>

    <LazyAccountSetupListModal v-if="openedCategory" v-model="listModalDlg" :category="openedCategory" />
  </div>
</template>

<style scoped lang="scss"></style>
