"use strict";
exports.id = 5886;
exports.ids = [5886];
exports.modules = {

/***/ 5886:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// @ts-check
/**
 * Imports: Handle imports
 */ 
const encrypt = __webpack_require__(7547);
const sanitizeHtml = __webpack_require__(6109);
const sanitizeHtmlOptions = __webpack_require__(9544);
const DB_HANDLER = __webpack_require__(2224);
const DSQL_USER_DB_HANDLER = __webpack_require__(3403);
/**
 * Update DB Function
 * ==============================================================================
 * @description Description
 * @async
 *
 * @param {object} params - An object containing the function parameters.
 * @param {("Master" | "Dsql User")} [params.dbContext] - What is the database context? "Master"
 * or "Dsql User". Defaults to "Master"
 * @param {("Read Only" | "Full Access")} [params.paradigm] - What is the paradigm for "Dsql User"?
 * "Read only" or "Full Access"? Defaults to "Read Only"
 * @param {string} [params.dbFullName] - Database full name
 * @param {string} params.tableName - Table name
 * @param {string} [params.encryptionKey]
 * @param {string} [params.encryptionSalt]
 * @param {any} params.data - Data to add
 * @param {import("../../../types").DSQL_TableSchemaType} [params.tableSchema] - Table schema
 * @param {string} params.identifierColumnName - Update row identifier column name
 * @param {string | number} params.identifierValue - Update row identifier column value
 *
 * @returns {Promise<object|null>}
 */ async function updateDbEntry({ dbContext , paradigm , dbFullName , tableName , data , tableSchema , identifierColumnName , identifierValue , encryptionKey , encryptionSalt ,  }) {
    /**
     * Check if data is valid
     */ if (!data || !Object.keys(data).length) return null;
    const isMaster = dbContext?.match(/dsql.user/i) ? false : dbFullName && !dbFullName.match(/^datasquirel$/) ? false : true;
    /** @type {(a1:any, a2?:any)=> any } */ const dbHandler = isMaster ? DB_HANDLER : DSQL_USER_DB_HANDLER;
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Declare variables
     *
     * @description Declare "results" variable
     */ const dataKeys = Object.keys(data);
    let updateKeyValueArray = [];
    let updateValues = [];
    for(let i = 0; i < dataKeys.length; i++){
        try {
            const dataKey = dataKeys[i];
            // @ts-ignore
            let value = data[dataKey];
            const targetFieldSchemaArray = tableSchema ? tableSchema?.fields?.filter((field)=>field.fieldName === dataKey) : null;
            const targetFieldSchema = targetFieldSchemaArray && targetFieldSchemaArray[0] ? targetFieldSchemaArray[0] : null;
            if (value == null || value == undefined) continue;
            if (targetFieldSchema?.richText) {
                value = sanitizeHtml(value, sanitizeHtmlOptions);
            }
            if (targetFieldSchema?.encrypted) {
                value = encrypt(value, encryptionKey, encryptionSalt);
            }
            if (typeof value === "object") {
                value = JSON.stringify(value);
            }
            if (targetFieldSchema?.pattern) {
                const pattern = new RegExp(targetFieldSchema.pattern, targetFieldSchema.patternFlags || "");
                if (!pattern.test(value)) {
                    console.log("DSQL: Pattern not matched =>", value);
                    value = "";
                }
            }
            if (typeof value === "string" && value.match(/^null$/i)) {
                value = {
                    toSqlString: function() {
                        return "NULL";
                    }
                };
            }
            if (typeof value === "string" && !value.match(/./i)) {
                value = {
                    toSqlString: function() {
                        return "NULL";
                    }
                };
            }
            updateKeyValueArray.push(`\`${dataKey}\`=?`);
            if (typeof value == "number") {
                updateValues.push(String(value));
            } else {
                updateValues.push(value);
            }
        ////////////////////////////////////////
        ////////////////////////////////////////
        } catch (/** @type {any} */ error) {
            ////////////////////////////////////////
            ////////////////////////////////////////
            console.log("DSQL: Error in parsing data keys in update function =>", error.message);
            continue;
        }
    }
    ////////////////////////////////////////
    ////////////////////////////////////////
    updateKeyValueArray.push(`date_updated='${Date()}'`);
    updateKeyValueArray.push(`date_updated_code='${Date.now()}'`);
    ////////////////////////////////////////
    ////////////////////////////////////////
    const query = `UPDATE ${tableName} SET ${updateKeyValueArray.join(",")} WHERE \`${identifierColumnName}\`=?`;
    updateValues.push(identifierValue);
    const updatedEntry = isMaster ? await dbHandler(query, updateValues) : await dbHandler({
        paradigm,
        database: dbFullName,
        queryString: query,
        queryValues: updateValues
    });
    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////
    /**
     * Return statement
     */ return updatedEntry;
}
////////////////////////////////////////
////////////////////////////////////////
////////////////////////////////////////
module.exports = updateDbEntry;


/***/ }),

/***/ 9544:
/***/ ((module) => {

// @ts-check

const sanitizeHtmlOptions = {
    allowedTags: [
        "b",
        "i",
        "em",
        "strong",
        "a",
        "p",
        "span",
        "ul",
        "ol",
        "li",
        "h1",
        "h2",
        "h3",
        "h4",
        "h5",
        "h6",
        "img",
        "div",
        "button",
        "pre",
        "code",
        "br"
    ],
    allowedAttributes: {
        a: [
            "href"
        ],
        img: [
            "src",
            "alt",
            "width",
            "height",
            "class",
            "style"
        ],
        "*": [
            "style",
            "class"
        ]
    }
};
module.exports = sanitizeHtmlOptions;


/***/ })

};
;