import type WebView from "./webview";

export interface TabProps {
  role: string;
  icon?: string;
  name: string;
  $root: Element;
  onClick: () => void;
  index: number;
  tabIndex: number;
  onHover?: () => void;
  onHoverOut?: () => void;
  webview: WebView;
  materialIcon?: string;
  onDestroy?: () => void;
}

export default abstract class Tab {
  props: TabProps;
  webview: WebView;
  abstract $el: Element;

  constructor(props: TabProps) {
    this.props = props;
    this.webview = this.props.webview;
  }

  registerListeners(): void {
    this.$el.addEventListener("click", this.props.onClick);

    if (this.props.onHover !== undefined) {
      this.$el.addEventListener("mouseover", this.props.onHover);
    }

    if (this.props.onHoverOut !== undefined) {
      this.$el.addEventListener("mouseout", this.props.onHoverOut);
    }
  }

  showNetworkError(): void {
    this.webview.forceLoad();
  }

  activate(): void {
    this.$el.classList.add("active");
    this.webview.load();
  }

  deactivate(): void {
    this.$el.classList.remove("active");
    this.webview.hide();
  }

  destroy(): void {
    this.$el.remove();
    this.webview.$el!.remove();
  }
}
