import Component from '@ember/component';
import layout from './template';
import Resource from '@rancher/ember-api-store/models/resource';
import { computed, get, observer } from '@ember/object'
import { run } from '@ember/runloop';

export default Component.extend({
  layout,
  resource:     null, // The object that is being edited
  resourceType: null, // The schema type the object is
  field:        null, // The field on resource that this input is for
  schema:       null, // All the schemas for all the types
  typeDocs:     null, // Type docs for all the types
  value:        null,

  tagName:    'div',
  classNames: ['vertical-middle', 'span-6', 'api-field', 'box', 'mb-20'],

  valueChanged: observer('value', function() {
    run.schedule('afterRender', () => {
      get(this, 'resource').set(get(this, 'field'), get(this, 'value'));
    });
  }),

  fieldDef: computed('field', 'resourceType', 'schema', function() {
    var fieldName = get(this, 'field');
    var schema = get(this, 'schema');

    if ( !schema ) {
      return;
    }

    var orig = schema.resourceFields[fieldName];

    if ( !orig ) {
      return;
    }

    var out;

    if ( Resource.detectInstance(orig) ) {
      // the "type" field makes the store turn these into resources...
      out = orig.serialize();
    } else {
      out = JSON.parse(JSON.stringify(orig));
    }

    out.name = fieldName;


    return out;
  }),

  fieldType: computed('fieldDef', function() {
    return get(this, 'fieldDef.type');
  }),

  specialField: computed('typeDocs', function() {
    const { typeDocs, field: fieldName } = this;

    if (typeDocs) {
      return !!typeDocs[fieldName];
    } else {
      return false;
    }
  }),

});
