import CustomWizard from '../models/custom-wizard';
import { ajax } from 'discourse/lib/ajax';

export default Discourse.Route.extend({
  beforeModel() {
    const param = this.paramsFor('adminWizard').wizard_id;
    const wizards = this.modelFor('admin-wizards-custom');

    if (wizards.length && (param === 'first' || param === 'last')) {
      const wizard = wizards.get(`${param}Object`);
      if (wizard) {
        this.transitionTo('adminWizard', wizard.id.dasherize());
      }
    }
  },

  model(params) {
    const wizardId = params.wizard_id;

    if (wizardId === 'new') {
      this.set('newWizard', true);
      return CustomWizard.create();
    };
    this.set('newWizard', false);

    const wizard = this.modelFor('admin-wizards-custom').findBy('id', wizardId.underscore());

    if (!wizard) return this.transitionTo('adminWizard', 'new');

    return wizard;
  },

  afterModel(model) {
    return Ember.RSVP.all([
      this._getFieldTypes(model),
      this._getThemes(model),
      this._getApis(model)
    ]);
  },

  _getFieldTypes(model) {
    return ajax('/admin/wizards/field-types')
      .then((result) => model.set('fieldTypes', result.types));
  },

  _getThemes(model) {
    return this.store.findAll('theme').then((result) => {
      model.set('themes', result.content);
    });
  },

  _getApis(model) {
    return ajax('/admin/wizards/apis')
      .then((result) => model.set('apis', result));
  },

  setupController(controller, model) {
    const newWizard = this.get('newWizard');
    const steps = model.get('steps') || [];
    controller.setProperties({
      newWizard,
      model,
      currentStep: steps[0]
    });
  },

  actions: {
    refreshWizard() {
      this.refresh();
    }
  }
});