
const webPush = {
    async init() {
        if (!('serviceWorker' in navigator) || !('PushManager' in window)) {
            console.error('[WebPush] Push повідомлення не підтримуються');
            return;
        }

        try {
            // Отримуємо публічний ключ VAPID із сервера
            const uuid = localStorage.getItem('uuid');
            const res = await fetch(`${CONFIG.api}push/key`, {
                method: 'GET',
                headers: {
                    "Content-Type": "application/json",
                    "Authorization": uuid
                }
            });
            const { publicKey } = await res.json();

            // Перетворюємо ключ
            function urlBase64ToUint8Array(base64String) {
                const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
                const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
                const raw = atob(base64);
                return Uint8Array.from([...raw].map(ch => ch.charCodeAt(0)));
            }

            // Беремо вже зареєстрований Service Worker
            const registration = await navigator.serviceWorker.ready;

            // Перевіряємо, чи є підписка
            let subscription = await registration.pushManager.getSubscription();

            if (!subscription) {

                // Запитуємо дозвіл
                const permission = await Notification.requestPermission();
                if (permission !== 'granted') {
                    console.warn('[WebPush] Push повідомлення заборонено користувачем');
                    return;
                }

                // Підписка на push
                subscription = await registration.pushManager.subscribe({
                    userVisibleOnly: true,
                    applicationServerKey: urlBase64ToUint8Array(publicKey)
                });

                // дані пристроя
                const deviceInfo = {
                    name: navigator.userAgent,
                    model: navigator.platform || "unknown"
                };

                // Надсилання на сервер
                await fetch(`${CONFIG.api}push/subscribe`, {
                    method: 'POST',
                    headers: {
                        "Content-Type": "application/json",
                        "Authorization": uuid
                    },
                    body: JSON.stringify({ subscription, device: deviceInfo })
                });

                console.log('[WebPush] Push підписка готова:', subscription);

                console.log('[WebPush] Створено нову підписку');
            } else {
                console.log('[WebPush] Підписка вже існує');
            }

        } catch (err) {
            console.error('[WebPush] Помилка ініціалізації push:', err);
        }
    },

    async unsubscribe() {
        const uuid = localStorage.getItem('uuid');
        const registration = await navigator.serviceWorker.ready;
        const subscription = await registration.pushManager.getSubscription();

        if (subscription) {
            // видаляємо підписку у браузері
            const success = await subscription.unsubscribe();

            if (success) {
                console.log("[WebPush] Локальна підписка скасована");

                // повідомляємо сервер
                await fetch(`${CONFIG.api}push//unsubscribe`, {
                    method: "DELETE",
                    headers: {
                        "Content-Type": "application/json",
                        "Authorization": uuid
                    },
                    body: JSON.stringify({ endpoint: subscription.endpoint })
                });
            }
        } else {
            console.log("[WebPush] Підписки немає");
        }
    }
}