<template lang='pug'>
.errorpage
  .errorpage-bg
  .errorpage-content
    .errorpage-code {{error.code}}
    .errorpage-title {{error.title}}
    .errorpage-hint {{error.hint}}
    .errorpage-actions
      q-btn(
        v-if='error.showHomeBtn'
        push
        color='primary'
        label='Go to home'
        icon='las la-home'
        to='/'
      )
      q-btn.q-ml-md(
        v-if='error.showLoginBtn'
        push
        color='primary'
        label='Login As...'
        icon='las la-sign-in-alt'
        to='/login'
      )

</template>

<script setup>
import { useI18n } from 'vue-i18n'
import { useMeta } from 'quasar'
import { computed } from 'vue'
import { useRoute } from 'vue-router'

const actions = {
  unauthorized: {
    code: 403,
    showLoginBtn: true
  },
  notfound: {
    code: 404
  },
  unknownsite: {
    code: 'X!?',
    showHomeBtn: false
  },
  generic: {
    code: '!?0'
  }
}

// ROUTER

const route = useRoute()

// I18N

const { t } = useI18n()

// META

useMeta({
  title: t('common.error.title')
})

// COMPUTED

const error = computed(() => {
  if (route.params.action && actions[route.params.action]) {
    return {
      showHomeBtn: true,
      ...actions[route.params.action],
      title: t(`common.error.${route.params.action}.title`),
      hint: t(`common.error.${route.params.action}.hint`)
    }
  } else {
    return {
      showHomeBtn: true,
      ...actions.generic,
      title: t('common.error.generic.title'),
      hint: t('common.error.generic.hint')
    }
  }
})
</script>

<style lang="scss">
  .errorpage {
    background: $dark-6 radial-gradient(ellipse, $dark-4, $dark-6);
    color: #FFF;
    height: 100vh;

    &-bg {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 320px;
      height: 320px;
      background: linear-gradient(0, transparent 50%, $red-9 50%);
      border-radius: 50%;
      filter: blur(80px);
      transform: translate(-50%, -50%);
      visibility: hidden;
    }

    &-content {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
    }

    &-code {
      font-size: 12rem;
      line-height: 12rem;
      font-weight: 700;
      background: linear-gradient(45deg, $red-9, $red-3);
      background-clip: text;
      -webkit-text-fill-color: transparent;
      user-select: none;
    }

    &-title {
      font-size: 5rem;
      font-weight: 500;
      line-height: 5rem;
    }

    &-hint {
      font-size: 1.2rem;
      font-weight: 500;
      color: $red-3;
      line-height: 1.2rem;
      margin-top: 1rem;
    }

    &-actions {
      margin-top: 2rem;
    }
  }
</style>