import { execSync, ExecSyncOptions } from "child_process";
import os from "os";

export type ExportMariaDBDatabaseParam = {
    dbFullName: string;
    targetFilePath: string;
    mariadbUser?: string;
    mariadbHost?: string;
    mariadbPass?: string;
};

export default function exportMariadbDatabase({
    dbFullName,
    targetFilePath,
    mariadbHost,
    mariadbPass,
    mariadbUser,
}: ExportMariaDBDatabaseParam) {
    const mysqlDumpPath = os.platform().match(/win/i)
        ? "'" +
          "C:\\Program Files\\MySQL\\MySQL Server 8.0\\bin\\mysqldump.exe" +
          "'"
        : "mysqldump";

    const finalMariadbUser = mariadbUser || process.env.DSQL_DB_USERNAME;
    const finalMariadbHost = mariadbHost || process.env.DSQL_DB_HOST;
    const finalMariadbPass = mariadbPass || process.env.DSQL_DB_PASSWORD;

    const cmd = `${mysqlDumpPath} -u ${finalMariadbUser} -h ${finalMariadbHost} -p${finalMariadbPass} ${dbFullName} > ${targetFilePath}`;

    let execSyncOptions: ExecSyncOptions = {
        encoding: "utf-8",
    };

    const dumpDb = execSync(cmd, execSyncOptions);

    return dumpDb;
}