"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = checkTableRecordCreateDbSchema;
const varDatabaseDbHandler_1 = __importDefault(require("../utils/varDatabaseDbHandler"));
const sql_generator_1 = __importDefault(require("../../functions/dsql/sql/sql-generator"));
const numberfy_1 = __importDefault(require("../../utils/numberfy"));
const addDbEntry_1 = __importDefault(require("../../functions/backend/db/addDbEntry"));
/**
 * # Create database from Schema Function
 * @requires DSQL_DB_CONN - Gobal Variable for Datasquirel Database
 */
function checkTableRecordCreateDbSchema(_a) {
    return __awaiter(this, arguments, void 0, function* ({ userId, tableSchema, dbSchema, dbRecord, dbFullName, }) {
        var _b;
        if (!tableSchema)
            return undefined;
        try {
            const queryObj = (0, sql_generator_1.default)({
                tableName: "user_database_tables",
                genObject: {
                    query: {
                        db_id: {
                            value: String(dbRecord === null || dbRecord === void 0 ? void 0 : dbRecord.id),
                        },
                        table_slug: {
                            value: tableSchema.tableName,
                        },
                        user_id: {
                            value: String(userId),
                        },
                    },
                },
                dbFullName: "datasquirel",
            });
            let recordedTableEntryArray = userId
                ? yield (0, varDatabaseDbHandler_1.default)({
                    queryString: (queryObj === null || queryObj === void 0 ? void 0 : queryObj.string) || "",
                    queryValuesArray: queryObj === null || queryObj === void 0 ? void 0 : queryObj.values,
                })
                : undefined;
            let recordedTableEntry = recordedTableEntryArray === null || recordedTableEntryArray === void 0 ? void 0 : recordedTableEntryArray[0];
            if (!(recordedTableEntry === null || recordedTableEntry === void 0 ? void 0 : recordedTableEntry.id) && userId) {
                const newTableInsertObject = {
                    user_id: (0, numberfy_1.default)(userId),
                    db_id: dbRecord === null || dbRecord === void 0 ? void 0 : dbRecord.id,
                    db_slug: dbRecord === null || dbRecord === void 0 ? void 0 : dbRecord.db_slug,
                    table_name: tableSchema.tableFullName,
                    table_slug: tableSchema.tableName,
                };
                if ((tableSchema === null || tableSchema === void 0 ? void 0 : tableSchema.childTable) && tableSchema.childTableName) {
                    const parentDb = dbSchema.find((db) => db.dbFullName == tableSchema.childTableDbFullName);
                    const parentDbTable = parentDb === null || parentDb === void 0 ? void 0 : parentDb.tables.find((tbl) => tbl.tableName == tableSchema.childTableName);
                    if (parentDb && parentDbTable) {
                        newTableInsertObject["child_table"] = 1;
                        newTableInsertObject["child_table_parent_database"] =
                            parentDb.dbFullName;
                        newTableInsertObject["child_table_parent_table"] =
                            parentDbTable.tableName;
                    }
                }
                const newTableRecordEntry = (yield (0, addDbEntry_1.default)({
                    data: newTableInsertObject,
                    tableName: "user_database_tables",
                    dbContext: "Master",
                    forceLocal: true,
                }));
                if (newTableRecordEntry.insertId) {
                    recordedTableEntryArray = yield (0, varDatabaseDbHandler_1.default)({
                        queryString: (queryObj === null || queryObj === void 0 ? void 0 : queryObj.string) || "",
                        queryValuesArray: queryObj === null || queryObj === void 0 ? void 0 : queryObj.values,
                    });
                    recordedTableEntry = recordedTableEntryArray === null || recordedTableEntryArray === void 0 ? void 0 : recordedTableEntryArray[0];
                }
            }
            return recordedTableEntry;
        }
        catch (error) {
            (_b = global.ERROR_CALLBACK) === null || _b === void 0 ? void 0 : _b.call(global, `Error Checking Table Record on Creating Schema`, error);
            return undefined;
        }
    });
}