'use strict';
import { Injectable, EventEmitter } from '@angular/core';
import { BrowserDomAdapter } from '@angular/platform-browser/src/browser/browser_adapter';
import { global } from '@angular/core/src/facade/lang';

import { RedocEventsService } from './events.service';

@Reflect.metadata('parameters', [[BrowserDomAdapter], [RedocEventsService]])
@Injectable()
export class Hash {
  constructor(dom, events) {
    this.changed = new EventEmitter();
    this.dom = dom;
    this.bind();

    events.bootstrapped.subscribe(() => this.changed.next(this.hash));
  }

  get hash() {
    return this.dom.getLocation().hash;
  }

  bind() {
    this._cancel = this.dom.onAndCancel(global, 'hashchange', (evt) => {
      this.changed.next(this.hash);
      evt.preventDefault();
    });
  }

  unbind() {
    this._cancel();
  }
}
