let mobileForced = false;

//  An object that is responsible for logic related to mobile devices.
const Mobile = {
  isMobileDevice: false,
  mobileView: false,

  init() {
    const $html = $('html');
    this.isMobileDevice = mobileForced || $html.hasClass('mobile-device');
    this.mobileView = mobileForced || $html.hasClass('mobile-view');

    if (Ember.testing || mobileForced) { return; }

    try{
      if (window.location.search.match(/mobile_view=1/)){
        localStorage.mobileView = true;
      }
      if (window.location.search.match(/mobile_view=0/)){
        localStorage.mobileView = false;
      }
      if (localStorage.mobileView) {
        var savedValue = (localStorage.mobileView === 'true');
        if (savedValue !== this.mobileView) {
          this.reloadPage(savedValue);
        }
      }
    } catch(err) {
      // localStorage may be disabled, just skip this
      // you get security errors if it is disabled
    }

    // Sam: I tried this to disable zooming on iOS 10 but it is not consistent
    //  you can still sometimes trigger zoom and be stuck in a horrible state
    //
    // let iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);
    // if (iOS) {
    //   document.documentElement.addEventListener('touchstart', function (event) {
    //     if (event.touches.length > 1) {
    //       event.preventDefault();
    //     }
    //   }, false);
    // }
  },

  toggleMobileView() {
    try {
      if (localStorage) {
        localStorage.mobileView = !this.mobileView;
      }
    } catch(err) {
      // localStorage may be disabled, skip
    }
    this.reloadPage(!this.mobileView);
  },

  reloadPage(mobile) {
    window.location.assign(window.location.pathname + '?mobile_view=' + (mobile ? '1' : '0'));
  }
};

export function forceMobile() {
  mobileForced = true;
}

export function resetMobile() {
  mobileForced = false;
}

// Backwards compatibiltity, deprecated
Object.defineProperty(Discourse, 'Mobile', {
  get: function() {
    Ember.warn("DEPRECATION: `Discourse.Mobile` is deprecated, use `this.site.mobileView` instead");
    return Mobile;
  }
});

export default Mobile;
