<script setup lang="ts">
// Регистрация toast-провайдера кита для геймификации: useToast() кит требует
// вызывать внутри <GnToastProvider> — потому мостик живёт внутри провайдера,
// а не в App.vue (который провайдер только рендерит).
import { onMounted } from 'vue'
import { useToast } from 'gnexus-ui-kit/vue'
import { api } from '../api'
import { initGamification, notifyDaily, notifyRemoteXp } from '../gamification'
import { onRealtime } from '../realtime'
initGamification(useToast())
// SSE-эхо начисления XP (ТЗ 3.14): своя вкладка празднует по заголовкам ответа,
// соседние вкладки показывают скромный тост (дедуп wasOwnActivity)
onRealtime('xp.changed', (e) => {
const amount = Number(e.data?.amount)
if (e.data?.celebrate) notifyRemoteXp(amount)
})
// Дейли-награда за визит (ТЗ 3.13): при каждой загрузке приложения спрашиваем
// бэк — он начисляет 50 монет только раз в сутки, повторные входы молчат
onMounted(async () => {
try {
const res = await api.claimDaily()
notifyDaily(res.granted, res.coins)
} catch {
// нет сети/сессии — награда не критична, тихо пропускаем
}
})
</script>
<template />