import DiscourseRoute from "discourse/routes/discourse";
import { userProperties, generateName } from '../lib/wizard';
import { set } from "@ember/object";
import { all } from "rsvp";
import { ajax } from 'discourse/lib/ajax';

export default DiscourseRoute.extend({  
  model() {
    return ajax("/admin/wizards/wizard");
  },
  
  afterModel(model) {
    return all([
      this._getThemes(model),
      this._getApis(model),
      this._getUserFields(model)
    ]);
  },
  
  _getThemes(model) {
    return ajax('/admin/themes')
      .then((result) => {
        set(model, 'themes', result.themes.map(t => {
          return {
            id: t.id,
            name: t.name
          }
        }));
      });
  },

  _getApis(model) {
    return ajax('/admin/wizards/apis')
      .then((result) => set(model, 'apis', result));
  },
  
  _getUserFields(model) {
    return this.store.findAll('user-field').then((result) => {
      if (result && result.content) {
        set(model, 'userFields', 
          result.content.map((f) => ({
            id: `user_field_${f.id}`,
            name: f.name
          })).concat(
            userProperties.map((f) => ({
              id: f,
              name: generateName(f)
            }))
          )
        );
      }
    });
  },
  
  currentWizard() {
    const params = this.paramsFor('adminWizardsWizardShow');    
    
    if (params && params.wizardId) {
      return params.wizardId;
    } else {
      return null;
    }
  },
  
  setupController(controller, model) {
    let props = {
      wizardList: model.wizard_list,
      wizardId: this.currentWizard()
    }
            
    controller.setProperties(props);
  },
  
  actions: {
    changeWizard(wizardId) {
      this.controllerFor('adminWizardsWizard').set('wizardId', wizardId);
      
      if (wizardId) {
        this.transitionTo('adminWizardsWizardShow', wizardId);
      } else {
        this.transitionTo('adminWizardsWizard');
      }
    },
    
    afterDestroy() {
      this.transitionTo('adminWizardsWizard').then(() => this.refresh());
    },
    
    afterSave(wizardId) {
      this.refresh().then(() => this.send('changeWizard', wizardId));
    },
    
    createWizard() {
      this.controllerFor('adminWizardsWizard').set('wizardId', 'create');
      this.transitionTo('adminWizardsWizardShow', 'create');
    }
  }
});