import { BaseClassWithoutId } from "@spacebar/util";

export const annotationsKey = Symbol("Annotations");

// Generates an array using the annotationsKey as a property on a class when annotated with the below decorators
export function initAnnotationMetadata(target: BaseClassWithoutId, propertyKey: string) {
    // eslint-disable-next-line @typescript-eslint/no-unused-expressions
    target[annotationsKey] || (target[annotationsKey] = {});
    // eslint-disable-next-line @typescript-eslint/no-unused-expressions
    target[annotationsKey][propertyKey] || (target[annotationsKey][propertyKey] = []);
}

// Adds to the generated array on the class with the annotation added.
export function addAnnotationMetadata(target: BaseClassWithoutId, propertyKey: string, annotation: string) {
    target[annotationsKey] = { ...target[annotationsKey], [propertyKey]: [...target[annotationsKey][propertyKey], annotation] };
}

export function JsonRemoveEmpty(target: BaseClassWithoutId, propertyKey: string) {
    initAnnotationMetadata(target, propertyKey);
    addAnnotationMetadata(target, propertyKey, "JsonRemoveEmpty");
}

export function JsonNumber(target: BaseClassWithoutId, propertyKey: string) {
    initAnnotationMetadata(target, propertyKey);
    addAnnotationMetadata(target, propertyKey, "JsonNumber");
}
