import { JsonSchema } from "./types";
import { mergeArraysUnique } from "./utils/merge";
import getTypeOf from "./getTypeOf";

/**
 * merges to two json schema. In case of conflicts, will use overwrite first
 * schema or directly return first json schema.
 */
export function mergeSchema(a: JsonSchema, b: JsonSchema) {
    const aType = getTypeOf(a);
    const bType = getTypeOf(b);
    if (aType !== bType) {
        return a;
    }

    const result = mergeArraysUnique(a, b);
    if (a.getOneOfOrigin) {
        Object.defineProperty(result, "getOneOfOrigin", {
            enumerable: false,
            value: a.getOneOfOrigin
        });
    } else if (b.getOneOfOrigin) {
        Object.defineProperty(result, "getOneOfOrigin", {
            enumerable: false,
            value: b.getOneOfOrigin
        });
    }

    return result;
}
