import { isDevMode } from '@angular/core';
import { Subscription } from 'rxjs';
import { isFunction } from './type';

const doUnsubscribe = (subscription: Subscription) => {
  if (subscription && isFunction(subscription.unsubscribe)) {
    if (isDevMode()) {
      console.log('[@bixi/core/utlis] auto unsubscribe');
    }
    subscription.unsubscribe();
  }
};

export function AutoUnsubscribe(subscription = 'subscription'): ClassDecorator {
  return function fn(constructor) {
    const original = constructor.prototype.ngOnDestroy;
    constructor.prototype.ngOnDestroy = function _ngOnDestroy() {
      if (isFunction(original)) {
        original.apply(this, arguments);
      }
      doUnsubscribe(this[subscription]);
    };
  };
}
