// ============================================================
// ===== PUSH-УВЕДОМЛЕНИЯ (ДОБАВЛЕНО) =====
// ============================================================
const VAPID_PUBLIC_KEY = 'BIQWw39UPTj6Q_yQ7mlc2Ce2iCcEBc9CJz2h02Qf-qE1HJBi3AO0ujt1bOA_Iup8eEHR-2Bpo8SKj9dqWxASo3Y';
async function subscribeToPush() {
if (!currentUser) {
console.log('Пользователь не авторизован');
return;
}
if (!('Notification' in window)) {
console.log('Браузер не поддерживает уведомления');
return;
}
if (!('serviceWorker' in navigator)) {
console.log('Service Worker не поддерживается');
return;
}
if (Notification.permission === 'denied') {
console.log('Уведомления запрещены');
return;
}
if (Notification.permission === 'default') {
const result = await Notification.requestPermission();
if (result !== 'granted') {
console.log('Пользователь отказал');
return;
}
}
try {
const registration = await navigator.serviceWorker.ready;
const existingSubscription = await registration.pushManager.getSubscription();
if (existingSubscription) {
console.log('Уже подписаны');
return;
}
const subscription = await registration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(VAPID_PUBLIC_KEY)
});
const res = await fetch('api.php?action=save_push_subscription', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
user_id: currentUser.id,
subscription: subscription
})
});
const data = await res.json();
if (data.success) {
console.log('✅ Подписка на пуши сохранена');
} else {
console.log('❌ Ошибка сохранения подписки:', data.error);
}
} catch(e) {
console.log('❌ Ошибка подписки на пуши:', e);
}
}
function urlBase64ToUint8Array(base64String) {
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding)
.replace(/\-/g, '+')
.replace(/_/g, '/');
const rawData = window.atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
// Запускаем подписку после загрузки страницы
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
if (currentUser) {
subscribeToPush();
}
}, 3000);
});