import { ValidUtils } from '@dooboostore/core';
import {ReflectUtils} from "@dooboostore/core";

export const DomRenderNoProxyKey = 'DomRender:NoProxy'
export const DomRenderNoProxy = (target: any, propertyKey?: string | symbol) => {
    ReflectUtils.defineMetadata(DomRenderNoProxyKey, true, target, propertyKey);
    // 클래스 데코레이터로 사용된 경우
    // if (propertyKey === undefined) {
    //   // target은 클래스 생성자
    //   Reflect.defineMetadata(DomRenderNoProxyKey, true, target);
    //   return;
    // }
    //
    // // 프로퍼티 데코레이터로 사용된 경우
    // // target은 프로토타입, propertyKey는 프로퍼티 이름
    // Reflect.defineMetadata(DomRenderNoProxyKey, true, target, propertyKey);
};

export const getDomRenderNoProxy = (target: any, propertyKey?: string | symbol) => {
  // if (ValidUtils.isNotNullUndefined(target)) {
    return ReflectUtils.getMetadata(DomRenderNoProxyKey, target, propertyKey);
    // 클래스 데코레이터
    // if (propertyKey === undefined) {
    //   return Reflect.getMetadata(DomRenderNoProxyKey, target);
    // }
    // // 프로퍼티 데코레이터
    // return Reflect.getMetadata(DomRenderNoProxyKey, target, propertyKey);
  // } else {
  //   return undefined;
  // }
}

export const isDomRenderNoProxy = (target: any, propertyKey?: string | symbol) => {
  return ValidUtils.isNullOrUndefined(target) || getDomRenderNoProxy(target, propertyKey) === true;
}