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(
            (
                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;

# # Check which commands are used in macros
# SELECT DISTINCT command_name
# 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
