import Ember from 'ember';
import EditBase from './secret-edit';
import KeyMixin from 'vault/models/key-mixin';

var SecretProxy = Ember.Object.extend(KeyMixin, {
  store: null,

  toModel() {
    return this.getProperties('id', 'secretData', 'backend');
  },

  createRecord(backend) {
    let backendModel = this.store.peekRecord('secret-engine', backend);
    return this.store.createRecord(backendModel.get('modelTypeForKV'), this.toModel());
  },

  willDestroy() {
    this.store = null;
  },
});

export default EditBase.extend({
  wizard: Ember.inject.service(),
  createModel(transition, parentKey) {
    const { backend } = this.paramsFor('vault.cluster.secrets.backend');
    const modelType = this.modelType(backend);
    if (modelType === 'role-ssh') {
      return this.store.createRecord(modelType, { keyType: 'ca' });
    }
    if (modelType !== 'secret' && modelType !== 'secret-v2') {
      if (this.get('wizard.featureState') === 'details' && this.get('wizard.componentState') === 'transit') {
        this.get('wizard').transitionFeatureMachine('details', 'CONTINUE', 'transit');
      }
      return this.store.createRecord(modelType);
    }
    const key = transition.queryParams.initialKey || '';
    const model = SecretProxy.create({
      initialParentKey: parentKey,
      store: this.store,
    });

    if (key) {
      // have to set this after so that it will be
      // computed properly in the template (it's dependent on `initialParentKey`)
      model.set('keyWithoutParent', key);
    }
    return model;
  },

  model(params, transition) {
    const parentKey = params.secret ? params.secret : '';
    return Ember.RSVP.hash({
      secret: this.createModel(transition, parentKey),
      capabilities: {},
    });
  },
});
