// @ts-check

/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */

/**
 * # Generate SQL text for Field
 */
export default function generateColumnDescription({
    columnData,
    primaryKeySet,
}: {
    columnData: import("../types").DSQL_FieldSchemaType;
    primaryKeySet?: boolean;
}): { fieldEntryText: string; newPrimaryKeySet: boolean } {
    /**
     * Format tableInfoArray
     *
     * @description Format tableInfoArray
     */
    const {
        fieldName,
        dataType,
        nullValue,
        primaryKey,
        autoIncrement,
        defaultValue,
        defaultValueLiteral,
        notNullValue,
    } = columnData;

    let fieldEntryText = "";

    fieldEntryText += `\`${fieldName}\` ${dataType}`;

    ////////////////////////////////////////

    if (nullValue) {
        fieldEntryText += " DEFAULT NULL";
    } else if (defaultValueLiteral) {
        fieldEntryText += ` DEFAULT ${defaultValueLiteral}`;
    } else if (defaultValue) {
        fieldEntryText += ` DEFAULT '${defaultValue}'`;
    } else if (notNullValue) {
        fieldEntryText += ` NOT NULL`;
    }

    ////////////////////////////////////////

    if (primaryKey && !primaryKeySet) {
        fieldEntryText += " PRIMARY KEY";
        primaryKeySet = true;
    }

    ////////////////////////////////////////

    if (autoIncrement) {
        fieldEntryText += " AUTO_INCREMENT";
        primaryKeySet = true;
    }

    ////////////////////////////////////////
    ////////////////////////////////////////
    ////////////////////////////////////////

    return { fieldEntryText, newPrimaryKeySet: primaryKeySet || false };
}

/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */
/** ****************************************************************************** */