import { ref, onMounted, onUnmounted } from 'vue'
import { router, usePage } from '@inertiajs/vue3'
import axios from 'axios'

/**
 * Live polling — sayfada açıkken her 30 saniyede bir sunucu durumunu kontrol eder.
 * İleride Laravel Echo + Reverb WebSocket ile değiştirilecek (aynı API surface).
 */
export function useLive(options = {}) {
    const { interval = 30_000, onUpdate = null } = options

    const status = ref(null)
    const isOnline = ref(true)
    const lastUpdate = ref(null)
    let timer = null

    const fetchStatus = async () => {
        try {
            const { data } = await axios.get('/api/live/status')
            const previousUnread = status.value?.notifications_unread
            status.value = data
            lastUpdate.value = new Date()
            isOnline.value = true

            // Bildirim sayısı değiştiyse Inertia notifications shared prop'unu refresh et
            if (previousUnread !== undefined && previousUnread !== data.notifications_unread) {
                router.reload({ only: ['notifications'] })
            }

            if (onUpdate) onUpdate(data)
        } catch (e) {
            isOnline.value = false
        }
    }

    onMounted(() => {
        fetchStatus()
        timer = setInterval(() => {
            // Tab gizliyse polling'i durdur (CPU/network tasarrufu)
            if (document.hidden) return
            fetchStatus()
        }, interval)

        // Tab visibility change handler
        document.addEventListener('visibilitychange', () => {
            if (!document.hidden) fetchStatus()
        })
    })

    onUnmounted(() => {
        if (timer) clearInterval(timer)
    })

    return { status, isOnline, lastUpdate, refresh: fetchStatus }
}
