import MainBackground from "./main.background";
import NotificationBackground from "./notification.background";

export default class TabsBackground {
  constructor(
    private main: MainBackground,
    private notificationBackground: NotificationBackground
  ) {}

  async init() {
    if (!chrome.tabs) {
      return;
    }

    chrome.tabs.onActivated.addListener(async (activeInfo: chrome.tabs.TabActiveInfo) => {
      await this.main.refreshBadgeAndMenu();
      this.main.messagingService.send("tabActivated");
      this.main.messagingService.send("tabChanged");
    });

    chrome.tabs.onReplaced.addListener(async (addedTabId: number, removedTabId: number) => {
      if (this.main.onReplacedRan) {
        return;
      }
      this.main.onReplacedRan = true;
      await this.notificationBackground.checkNotificationQueue();
      await this.main.refreshBadgeAndMenu();
      this.main.messagingService.send("tabReplaced");
      this.main.messagingService.send("tabChanged");
    });

    chrome.tabs.onUpdated.addListener(
      async (tabId: number, changeInfo: chrome.tabs.TabChangeInfo, tab: chrome.tabs.Tab) => {
        if (this.main.onUpdatedRan) {
          return;
        }
        this.main.onUpdatedRan = true;
        await this.notificationBackground.checkNotificationQueue(tab);
        await this.main.refreshBadgeAndMenu();
        this.main.messagingService.send("tabUpdated");
        this.main.messagingService.send("tabChanged");
      }
    );
  }
}
