CREATE TABLE command_macro (
    id INT UNSIGNED AUTO_INCREMENT,
    guild_id INT UNSIGNED NOT NULL,

    name VARCHAR(100) NOT NULL,
    description VARCHAR(100),
    commands JSON NOT NULL,

    FOREIGN KEY (guild_id) REFERENCES guilds(id) ON DELETE CASCADE,
    PRIMARY KEY (id)
);

# New JSON structure is {command_name: "Remind", "<option name>": "<option value>", ...}
INSERT INTO command_macro (guild_id, description, name, commands)
SELECT
    guild_id,
    description,
    name,
    (
        SELECT JSON_ARRAYAGG(
            JSON_MERGE_PATCH(
                '{}',
                (
                    SELECT JSON_OBJECTAGG(t2.name, t2.value)
                    FROM JSON_TABLE(
                        JSON_ARRAY_APPEND(t1.options, '$', JSON_OBJECT('name', 'command_name', 'value', t1.command_name)),
                        '$[*]' COLUMNS (
                            name VARCHAR(64) PATH '$.name' ERROR ON ERROR,
                            value TEXT PATH '$.value' ERROR ON ERROR
                        )) AS t2
                )
            )
        )
        FROM macro m2
        JOIN JSON_TABLE(
            commands,
            '$[*]' COLUMNS (
                command_name VARCHAR(64) PATH '$.command_name' ERROR ON ERROR,
                options JSON PATH '$.options' ERROR ON ERROR
            )) AS t1
        WHERE m1.id = m2.id
    )
FROM macro m1;
