import _ from 'lodash';
import { Model } from '@nocobase/database';

export class Field extends Model {
  static async create(value?: any, options?: any): Promise<any> {
    // console.log({ value });
    const attributes = this.toAttributes(value);
    // @ts-ignore
    const model: Model = await super.create(attributes, options);
    return model;
  }

  static toAttributes(value = {}): any {
    const data = _.cloneDeep(value);
    const keys = [
      ...Object.keys(this.rawAttributes),
      ...Object.keys(this.associations),
    ];
    const attrs = _.pick(data, keys);
    const options = _.omit(data, keys);
    return { ...attrs, options };
  }

  async toProps() {
    const json = this.toJSON();
    const data: any = _.omit(json, ['options', 'created_at', 'updated_at']);
    const options = json['options'] || {};
    const fields = await this.getNestedFields();
    const props = { ...data, ...options };
    if (fields.length) {
      props['children'] = fields;
    }
    const uiSchema = await this.getUiSchema();
    if (uiSchema) {
      // props['uiSchema1'] = uiSchema;
      props['uiSchema'] = await uiSchema.toJSONSchema();
    }
    return props;
  }

  async getNestedFields() {
    const fields = await this.getChildren();
    const items = [];
    for (const field of fields) {
      items.push(await field.toProps());
    }
    return items;
  }
}