import {computed,observe} from 'mobx'
import Validator from '@/Common-Library/Validator'
import camelCase from './camelCase'


function defineComputedProperty(target, name, descriptor){
  Object.defineProperty(
    target,
    name,
    descriptor
  );
  computed(target, name, descriptor);
}
export const prefix = "validateError"


export default function validate(target, name, descriptor)
{
    const clazz = target.constructor;

    const prototype = clazz.prototype
    
    const validateName = camelCase('validateError', name);
    //增加
    if (target.hasOwnProperty('__validateFields')){
        target.__validateFields.push(name);
      } else {
        Object.defineProperty(target, '__validateFields', {
          configurable: true,
          enumerable: false,
          value: [name],
        })
    }
    //校验错误
    if (!target.hasOwnProperty('validateError')) {
        defineComputedProperty(target, 'validateError', {
          configurable: true,
          enumerable: false,
          get: getValidateError,
        })
      }
    //返回是否有错误
    if (!target.hasOwnProperty('isValid')) {
        defineComputedProperty(target, 'isValid', {
          configurable: true,
          enumerable: false,
          get: getIsValid,
        })
      }
    
}

function getValidateError() {
    return this.__validateFields.find(key =>this[camelCase(prefix,key)]);
}

function getIsValid() {
    return !this.validateError;
}