import { BackgroundOnEvent, RightClickEvent } from "./modules";
import { apiRequest } from "./utils/api";

chrome.runtime.onInstalled.addListener(() => {
  RightClickEvent.forEach((item) => {
    chrome.contextMenus.create({
      id: item.id,
      title: item.title,
      contexts: item.contexts,
    });
  });
});

chrome.tabs.onUpdated.addListener((_tabId, _changeInfo, tab) => {
  console.log(`Change URL: ${tab.url}`);
});

chrome.tabs.onRemoved.addListener((_tabId, removeInfo) => {
  console.log(removeInfo);
});

chrome.bookmarks.getRecent(10, (results) => {
  console.log(`bookmarks:`, results);
});

chrome.contextMenus.onClicked.addListener((clickData) => {
  // 如果点击的是搜索淘宝店铺且选中文字了
  const item = RightClickEvent.find((item) => item.id == clickData.menuItemId);
  if (item) {
    item.event(clickData);
  }
});

chrome.runtime.onMessage.addListener(
  (request: Message, _sender, sendResponse) => {
    const { type, data } = request;
    if (type == "apiRequest") {
      // API请求成功的回调
      data.success = (result: any) => {
        sendResponse({
          status: 200,
          data: result,
        });
      };
      // API请求失败的回调
      data.fail = (msg: any) => {
        sendResponse({
          status: 500,
          msg,
        });
      };
      // 发起请求
      apiRequest(data as any);
    } else {
      // 检测后台事件
      const eventItem = BackgroundOnEvent.find((item) => item.type == type);
      eventItem
        ?.event(data)
        .then((result) => {
          sendResponse && sendResponse(result);
        })
        .catch(() => {
          // TODO 捕获错误,避免太多错误堆栈
          // 如果错误直接数据置null
          sendResponse &&
            sendResponse({
              error: true,
            });
        });
    }

    return true;
  }
);

export {};
