"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = grabSchemaFieldsFromData;
const serverError_1 = __importDefault(require("./serverError"));
/**
 * # Add User Table to Database
 */
function grabSchemaFieldsFromData({ data, fields, excludeData, excludeFields, }) {
    var _a;
    try {
        /** @type {DSQL_FieldSchemaType[]} */
        const finalFields = [];
        /** @type {string[]} */
        let filteredFields = [];
        if (data && ((_a = Object.keys(data)) === null || _a === void 0 ? void 0 : _a[0])) {
            filteredFields = Object.keys(data);
        }
        if (fields) {
            filteredFields = [...filteredFields, ...fields];
            filteredFields = [...new Set(filteredFields)];
        }
        filteredFields = filteredFields
            .filter((fld) => !excludeData || !Object.keys(excludeData).includes(fld))
            .filter((fld) => !excludeFields ||
            !excludeFields.find((exlFld) => exlFld.fieldName == fld));
        filteredFields.forEach((fld) => {
            const value = data ? data[fld] : null;
            if (typeof value == "string") {
                const newField = {
                    fieldName: fld,
                    dataType: value.length > 255 ? "TEXT" : "VARCHAR(255)",
                };
                if (Boolean(value.match(/<[^>]+>/g))) {
                    newField.richText = true;
                }
                finalFields.push(newField);
            }
            else if (typeof value == "number") {
                finalFields.push({
                    fieldName: fld,
                    dataType: "INT",
                });
            }
            else {
                finalFields.push({
                    fieldName: fld,
                    dataType: "VARCHAR(255)",
                });
            }
        });
        return finalFields;
    }
    catch ( /** @type {any} */error) {
        console.log(`grabSchemaFieldsFromData.ts ERROR: ${error.message}`);
        (0, serverError_1.default)({
            component: "grabSchemaFieldsFromData.ts",
            message: error.message,
        });
        return [];
    }
}