// js/background.js

const SERVER_URL = 'http://85.236.189.41:5011';  // Замените на ваш URL сервера Flask
const EXTENSION_VERSION = '1.0';

let isConnected = false;
let heartbeatInterval = null;
let userKey = null;

// Функция для хранения userKey
function setUserKey(key) {
  userKey = key;
  // Хранение в синхронизированном хранилище для сохранения между устройствами
  chrome.storage.sync.set({ userKey: key });
}

// Функция для получения userKey
function getUserKey(callback) {
  if (userKey) {
    callback(userKey);
  } else {
    chrome.storage.sync.get('userKey', function(data) {
      if (data.userKey) {
        userKey = data.userKey;
        callback(userKey);
      } else {
        // Нет userKey, запрашиваем у пользователя
        promptForUserKey(callback);
      }
    });
  }
}

// Функция для запроса userKey у пользователя через попап
function promptForUserKey(callback) {
  chrome.runtime.sendMessage({ action: 'promptUserKey' }, function(response) {
    if (response && response.userKey) {
      setUserKey(response.userKey);
      callback(response.userKey);
    } else {
      // Обработка случая, когда пользователь не предоставил ключ
      console.error('User key is required.');
    }
  });
}

// Функция для подключения VPN с настройками прокси от сервера
function connectVPN(proxyConfig) {
  chrome.proxy.settings.set({ value: proxyConfig, scope: 'regular' }, function() {
    if (chrome.runtime.lastError) {
      console.error('Proxy settings error: ', chrome.runtime.lastError);
      return;
    }
    isConnected = true;
    chrome.storage.local.set({ isConnected: true });
    console.log('VPN подключен.');
  });
}

// Функция для отключения VPN
function disconnectVPN() {
  chrome.proxy.settings.clear({ scope: 'regular' }, function() {
    if (chrome.runtime.lastError) {
      console.error('Error clearing proxy settings: ', chrome.runtime.lastError);
      return;
    }
    isConnected = false;
    chrome.storage.local.set({ isConnected: false });
    console.log('VPN отключен.');
  });
}

// Функция для отправки heartbeat каждые 10 секунд
function startHeartbeat() {
  if (heartbeatInterval) {
    clearInterval(heartbeatInterval);
  }

  heartbeatInterval = setInterval(function() {
    sendHeartbeat();
  }, 10000);

  // Отправка сразу при запуске
  sendHeartbeat();
}

// Функция для отправки heartbeat и получения настроек прокси
function sendHeartbeat() {
  getUserKey(function(userKey) {
    // Получение URL текущей активной вкладки
    chrome.tabs.query({ active: true, lastFocusedWindow: true }, function(tabs) {
      const currentUrl = tabs[0]?.url || 'unknown';

      fetch(`${SERVER_URL}/api/heartbeat`, {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({
          userKey: userKey,
          version: EXTENSION_VERSION,
          currentUrl: currentUrl
        })
      })
      .then(response => response.json())
      .then(data => {
        if (data.status === 'ok') {
          // Получены детали прокси от сервера
          const newProxyConfig = {
            mode: "fixed_servers",
            rules: {
              singleProxy: {
                scheme: data.proxy.scheme,
                host: data.proxy.host,
                port: data.proxy.port
              },
              bypassList: ["localhost"]
            }
          };

          connectVPN(newProxyConfig);
        } else if (data.status === 'update_required') {
          // Уведомление пользователя о необходимости обновления расширения
          chrome.notifications.create({
            type: 'basic',
            iconUrl: 'icons/icon128.png',
            title: 'DarkVPN Требуется обновление',
            message: 'Пожалуйста, обновите расширение DarkVPN до последней версии.'
          });
          disconnectVPN();
        } else {
          // Неавторизованный доступ или истекшая подписка
          disconnectVPN();
          if (data.status === 'unauthorized') {
            console.warn('Unauthorized access or VPN stopped/banned.');
            
          } else if (data.status === 'subscription_expired') {
            console.warn('Subscription expired.');
          }
        }
      })
      .catch(error => {
        console.error('Ошибка при общении с сервером:', error);
        disconnectVPN();
      });
    });
  });
}

// Обработка сообщений от попапа
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action === 'promptUserKey') {
    // Обработка запроса на ввод userKey
    // Обычно, попап обрабатывает этот запрос, поэтому ничего не делаем здесь
  } else if (request.action === 'toggleConnection') {
    if (isConnected) {
      disconnectVPN();
      sendResponse({ isConnected: false });
    } else {
      sendHeartbeat();  // Попытка подключиться
      sendResponse({ isConnected: true });
    }
  }
  return true; // Указывает, что sendResponse будет вызван асинхронно
});

// При запуске расширения
startHeartbeat();

// Прослушивание изменений на вкладках для обновления текущего URL
chrome.tabs.onActivated.addListener(function(activeInfo) {
  sendHeartbeat();
});

chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
  if (changeInfo.url) {
    sendHeartbeat();
  }
});



Сделай так, что если (data.status === 'unauthorized'), то у ас снова будет запрапшиваться ключ