/**
 * 브라우저 알림 서비스
 */

let notificationPermission: NotificationPermission = 'default';

/**
 * 알림 권한 요청
 */
export const requestNotificationPermission = async (): Promise<boolean> => {
  if (!('Notification' in window)) {
    console.warn('이 브라우저는 알림을 지원하지 않습니다.');
    return false;
  }

  if (Notification.permission === 'granted') {
    notificationPermission = 'granted';
    return true;
  }

  if (Notification.permission === 'denied') {
    notificationPermission = 'denied';
    return false;
  }

  try {
    const permission = await Notification.requestPermission();
    notificationPermission = permission;
    return permission === 'granted';
  } catch (error) {
    console.error('알림 권한 요청 실패:', error);
    return false;
  }
};

/**
 * 브라우저 알림 표시
 */
export const showNotification = (title: string, options?: NotificationOptions): Notification | null => {
  if (!('Notification' in window)) {
    console.warn('이 브라우저는 알림을 지원하지 않습니다.');
    return null;
  }

  if (Notification.permission !== 'granted') {
    console.warn('알림 권한이 허용되지 않았습니다.');
    return null;
  }

  try {
    const notification = new Notification(title, {
      icon: '/favicon.ico',
      badge: '/favicon.ico',
      ...options,
    });

    // 알림 클릭 시 창 포커스
    notification.onclick = () => {
      window.focus();
      notification.close();
      
      // 알림 페이지로 이동 (옵션)
      if (options?.data?.page) {
        window.location.hash = options.data.page;
      }
    };

    return notification;
  } catch (error) {
    console.error('알림 표시 실패:', error);
    return null;
  }
};

/**
 * 알림 권한 상태 확인
 */
export const getNotificationPermission = (): NotificationPermission => {
  if (!('Notification' in window)) {
    return 'denied';
  }
  return Notification.permission;
};

/**
 * 알림 지원 여부 확인
 */
export const isNotificationSupported = (): boolean => {
  return 'Notification' in window;
};

export default {
  requestNotificationPermission,
  showNotification,
  getNotificationPermission,
  isNotificationSupported,
};

