-- Set the storage engine
SET DEFAULT_STORAGE_ENGINE = INNODB;

-- Enable foreign key constraints
SET FOREIGN_KEY_CHECKS = 1;

-- Create the users table if it does not exist
CREATE TABLE IF NOT EXISTS `%users_table%`
(
    `uuid`     char(36)    NOT NULL UNIQUE,
    `username` varchar(16) NOT NULL,

    PRIMARY KEY (`uuid`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci;
CREATE INDEX IF NOT EXISTS `%users_table%_username` ON `%users_table%` (`username`);

-- Create the user data table if it does not exist
CREATE TABLE IF NOT EXISTS `%user_data_table%`
(
    `version_uuid` char(36)    NOT NULL UNIQUE,
    `player_uuid`  char(36)    NOT NULL,
    `timestamp`    datetime    NOT NULL,
    `save_cause`   varchar(32) NOT NULL,
    `pinned`       boolean     NOT NULL DEFAULT FALSE,
    `data`         longblob    NOT NULL,
    PRIMARY KEY (`version_uuid`, `player_uuid`),
    FOREIGN KEY (`player_uuid`) REFERENCES `%users_table%` (`uuid`) ON DELETE CASCADE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci;

-- Create the map data table if it does not exist
CREATE TABLE IF NOT EXISTS `%map_data_table%`
(
    `server_name` varchar(32) NOT NULL,
    `map_id`      int         NOT NULL,
    `data`        longblob    NOT NULL,
    PRIMARY KEY (`server_name`, `map_id`)
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci;

-- Create the map ids table if it does not exist
CREATE TABLE IF NOT EXISTS `%map_ids_table%`
(
    `from_server_name` varchar(32) NOT NULL,
    `from_id`          int         NOT NULL,
    `to_server_name`   varchar(32) NOT NULL,
    `to_id`            int         NOT NULL,
    PRIMARY KEY (`from_server_name`, `from_id`, `to_server_name`),
    FOREIGN KEY (`from_server_name`, `from_id`) REFERENCES `%map_data_table%` (`server_name`, `map_id`) ON DELETE CASCADE
) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_unicode_ci;
