<template>
  <div v-if="appleError" class="text-white text-red bg-red-1 q-pa-xs q-mb-md text-center">
    {{ appleError }}
  </div>
  <q-btn
    @click="signInWithApple()"
    :loading="checkInProgress"
    icon="fa-brands fa-apple"
    :label="t`Увійти через Apple`"
    class="full-width"
    padding="md"
    color="primary"
    no-caps />
</template>

<script setup>
// "@capacitor-community/apple-sign-in": "^4.0.0",
//     "@capacitor/core": "^4.3.0",

import { SignInWithApple } from '@capacitor-community/apple-sign-in'
import { ref } from 'vue'
import { useRouter } from 'vue-router'
import { checkToken } from '@nitra/vite-boot/token'
import tfm from '@nitra/tfm'

const t = tfm.bind({ tr: getTr() })

const props = defineProps({
  // apple signin options
  id: { type: String, default: null }
})

const baseUrl = import.meta.env.BASE_URL

const router = useRouter()

const appleSignInOptions = {
  clientId: props.id,
  redirectURI: `https://${globalThis.location.host}/not-used-with-popup`, // Не використовується з popup, але потрібно щоб було задано
  scopes: 'email'
}

// событие когда пользователь авторизован
// const emit = defineEmits(['authorized'])

// лоадер
const checkInProgress = ref(false)

const signInWithApple = async () => {
  checkInProgress.value = true

  try {
    const { response } = await SignInWithApple.authorize(appleSignInOptions)

    if (!response.identityToken) {
      console.log('No identity token')
      checkInProgress.value = false
      return
    }

    // пользователь авторизован -> передаем родителю
    // emit('authorized', response.identityToken)
    loginWithApple(response.identityToken)
  } catch (error) {
    console.log(error)
  }

  checkInProgress.value = false
}

// APPLE
const appleError = ref('')

const loginWithApple = async idToken => {
  appleError.value = ''

  try {
    const respFromRun = await fetch(`${baseUrl}auth/apple`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        idToken
      })
    })

    const res = await respFromRun.json()
    if (res?.token) {
      const check = checkToken(res.token)
      if (check.result === 'ok') {
        await router.push('/')
      } else {
        appleError.value = t`Користувачу ${check.userName} не дозволено входити`
      }
    } else {
      appleError.value = t`Помилка Apple авторизації`
    }
  } catch (error) {
    appleError.value = error
  }
}

/**
 * LOCALIZATION
 * @returns {object} translations
 */
function getTr() {
  return {
    'Увійти через Apple': { ru: 'Вход с Apple' },
    'Помилка Apple авторизації': { ru: 'Ошибка авторизации Apple' },
    'Користувачу ': { ru: 'Пользователю ' },
    ' не дозволено входити': { ru: ' не разрешен вход' }
  }
}
</script>
