text: import dedent from 'dedent';
  import debugFactory from 'debug';
  import { Observable } from 'rx';
  import commitGoals from './commit-goals.json';
  
  const debug = debugFactory('fcc:utils/commit');
  
  export { commitGoals };
  
  export function completeCommitment$(user) {
    const {
      isFrontEndCert,
      isBackEndCert,
      isFullStackCert,
      isRespWebDesignCert,
      isFrontEndLibsCert,
      isJsAlgoDataStructCert,
      isDataVisCert,
      isApisMicroservicesCert,
      isInfosecQaCert
    } = user;
  
    return Observable.fromNodeCallback(user.pledge, user)()
      .flatMap(pledge => {
        if (!pledge) {
          return Observable.just('No pledge found');
        }
  
        const { goal } = pledge;
  
        if (
          (isFrontEndCert && goal === commitGoals.frontEndCert) ||
          (isBackEndCert && goal === commitGoals.backEndCert) ||
          (isFullStackCert && goal === commitGoals.fullStackCert) ||
          (isRespWebDesignCert && goal === commitGoals.respWebDesignCert) ||
          (isFrontEndLibsCert && goal === commitGoals.frontEndLibsCert) ||
          (isJsAlgoDataStructCert && goal === commitGoals.jsAlgoDataStructCert) ||
          (isDataVisCert && goal === commitGoals.dataVisCert) ||
          (isApisMicroservicesCert &&
          goal === commitGoals.apisMicroservicesCert) ||
          (isInfosecQaCert && goal === commitGoals.infosecQaCert)
        ) {
          debug('marking goal complete');
          pledge.isCompleted = true;
          pledge.dateEnded = new Date();
          pledge.formerUserId = pledge.userId;
          pledge.userId = null;
          return Observable.fromNodeCallback(pledge.save, pledge)();
        }
        return Observable.just(dedent`
          You have not yet reached your goal of completing the ${goal}
          Please retry when you have met the requirements.
        `);
      });
  }
  