// #ifdef H5
import axios from 'axios';
// #endif

import { RAINBOW_LINK } from './config';


export function checkUseServiceWorker(key: string, getFrontConfig?: Function) {
  let promise;

  // #ifdef H5
  promise = new Promise((resolve, reject) => {
    let func = () => axios.get(`${RAINBOW_LINK}?t=${Date.now()}`);
    if (typeof getFrontConfig === 'function') {
      func = () => getFrontConfig('service_worker_config', 'service_worker_config');
    }

    func().then((res: any) => {
      const result = res?.[key] || res.data?.[key];

      if (process.env.NODE_ENV === 'development') {
        reject();
        return;
      }

      if (result === 'open') {
        resolve(1);
        return;
      }

      reject();
    })
      .catch(() => {
        reject();
      });
  });

  // #endif

  // #ifndef H5
  promise = Promise.reject();
  // #endif

  return promise;
}

export function registerServiceWorker(key: string, getFrontConfig?: Function) {
  // #ifdef H5
  if ('serviceWorker' in navigator) {
    checkUseServiceWorker(key, getFrontConfig)
      .then(() => {
        register(key);
      })
      .catch(() => {
        unregister();
      });
  } else {
    console.log('[Service Worker] 不支持');
  }
  // #endif
}


function register(key: string) {
  window.addEventListener('load', () => {
    navigator.serviceWorker
      .register(`./service-worker-${key}.js`)
      .then((registration) => {
        console.log('[Service Worker] 注册成功：', registration);
      })
      .catch((error) => {
        console.log('[Service Worker] 注册失败：', error);
      });
  });
}

function unregister() {
  console.log('[Service Worker] unregister');
  navigator.serviceWorker.getRegistrations().then((registrations) => {
    registrations.forEach((sw) => {
      sw.unregister();
    });
  });
}
