import { MraidAPI } from "./MraidAPI";
import { SafeFrame } from "./SafeFrame";
import { RequestAnimationFrame } from "./RequestAnimationFrame";
import { IntersectionObserverAPI } from "./IntersectionObserverAPI";
import { Geometry } from "./Geometry";
import { IViewAbility } from "./IViewAbility";
export class SmartView {
  public methodName = "";
  private ad: HTMLElement;
  constructor(el: HTMLElement) {
    this.ad = el;
  }

  public getMethod = (m: number): IViewAbility => {

    switch (m) {
      case 0:
        let geometry = new Geometry(this.ad);
        if (geometry.isSupported()) {
          this.methodName = "geometry";
          return geometry;
        }

        let intersectionObserverAPI = new IntersectionObserverAPI(this.ad);
        if (intersectionObserverAPI.isSupported()) {
          this.methodName = "intersectionObserver";
        }

        let safeFrame = new SafeFrame(this.ad);
        if (safeFrame.isSupported()) {
          this.methodName = "safeFrame";
          return safeFrame;
        }

        let requestAnimationFrame = new RequestAnimationFrame(this.ad);
        if (requestAnimationFrame.isSupported()) {
          this.methodName = "requestAnimationFrame";
          return requestAnimationFrame;
        }

        let mraidAPI = new MraidAPI();
        if (mraidAPI.isSupported()) {
          this.methodName = "mraid";
          return mraidAPI;
        }

        break;
      case 1:
        this.methodName = "geometry";
        return new Geometry(this.ad);
      case 2:
        this.methodName = "intersectionObserver";
        return new IntersectionObserverAPI(this.ad);
      case 3:
        this.methodName = "safeFrame";
        return new SafeFrame(this.ad);
      case 4:
        this.methodName = "requestAnimationFrame";
        return new RequestAnimationFrame(this.ad);
      case 5:
        this.methodName = "mraid";
        return new MraidAPI();
      default:
        return null;
    }
    return null;
  }
}
