SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE IF NOT EXISTS `coin_vouchers` (
  `id` bigint(20) unsigned NOT NULL,
  `coins` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `rating` mediumint(8) unsigned NOT NULL DEFAULT '0',
  `token` char(24) DEFAULT NULL,
  `usages_left` smallint(5) unsigned DEFAULT NULL,
  `deleted` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DELIMITER $$
CREATE TRIGGER `coinVoucherTokenAutoGen` BEFORE INSERT ON `coin_vouchers`
 FOR EACH ROW IF NEW.token IS NULL THEN
	SET NEW.token = SUBSTRING(UPPER(REPLACE(UUID(), "-", "")), 1, 24);
END IF
$$
DELIMITER ;

CREATE TABLE IF NOT EXISTS `gifts` (
  `id` bigint(20) unsigned NOT NULL,
  `internal_name` varchar(256) NOT NULL DEFAULT 'Unnamed gift',
  `price` smallint(5) unsigned NOT NULL,
  `usages` int(10) unsigned NOT NULL DEFAULT '0',
  `image` mediumblob NOT NULL,
  `limit` tinyint(3) unsigned DEFAULT NULL,
  `limit_period` bigint(20) unsigned DEFAULT NULL,
  `updated` bigint(20) unsigned NOT NULL DEFAULT '0',
  `deleted` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `gift_categories` (
  `id` bigint(20) unsigned NOT NULL,
  `autoquery` varchar(512) DEFAULT NULL,
  `deleted` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `gift_categories_locales` (
  `id` bigint(20) unsigned NOT NULL,
  `category` bigint(20) unsigned NOT NULL,
  `language` char(8) CHARACTER SET ascii COLLATE ascii_bin NOT NULL,
  `name` varchar(1024) NOT NULL,
  `description` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `gift_relations` (
  `id` bigint(20) unsigned NOT NULL,
  `gift` bigint(20) unsigned NOT NULL,
  `category` bigint(20) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `gift_user_relations` (
  `id` bigint(20) unsigned NOT NULL,
  `gift` bigint(20) unsigned NOT NULL,
  `sender` bigint(20) unsigned NOT NULL,
  `receiver` bigint(20) unsigned NOT NULL,
  `comment` text,
  `anonymous` tinyint(1) NOT NULL DEFAULT '0',
  `sent` bigint(20) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS `voucher_users` (
  `id` bigint(20) unsigned NOT NULL,
  `voucher` bigint(20) unsigned NOT NULL,
  `user` bigint(20) unsigned NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `coin_vouchers`
  ADD PRIMARY KEY (`id`),
  ADD KEY `token` (`token`,`deleted`);

ALTER TABLE `gifts`
  ADD PRIMARY KEY (`id`),
  ADD KEY `deleted` (`deleted`);

ALTER TABLE `gift_categories`
  ADD PRIMARY KEY (`id`),
  ADD KEY `deleted` (`deleted`);

ALTER TABLE `gift_categories_locales`
  ADD PRIMARY KEY (`id`),
  ADD KEY `category` (`category`),
  ADD KEY `category_2` (`category`,`language`);

ALTER TABLE `gift_relations`
  ADD PRIMARY KEY (`id`),
  ADD KEY `gift` (`gift`),
  ADD KEY `category` (`category`);

ALTER TABLE `gift_user_relations`
  ADD PRIMARY KEY (`id`),
  ADD KEY `gift` (`gift`),
  ADD KEY `sender` (`sender`),
  ADD KEY `receiver` (`receiver`),
  ADD KEY `sent` (`sent`);

ALTER TABLE `voucher_users`
  ADD PRIMARY KEY (`id`),
  ADD KEY `voucher` (`voucher`,`user`),
  ADD KEY `FK_userToVoucher` (`user`);

ALTER TABLE `coin_vouchers`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `gifts`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `gift_categories`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `gift_categories_locales`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `gift_relations`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `gift_user_relations`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `voucher_users`
  MODIFY `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;

ALTER TABLE `gift_categories_locales`
  ADD CONSTRAINT `FK_localeToGiftCat` FOREIGN KEY (`category`) REFERENCES `gift_categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `gift_relations`
  ADD CONSTRAINT `FK_categoryToGift` FOREIGN KEY (`category`) REFERENCES `gift_categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_giftToCategory` FOREIGN KEY (`gift`) REFERENCES `gifts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `gift_user_relations`
  ADD CONSTRAINT `FK_giftToReceiver` FOREIGN KEY (`receiver`) REFERENCES `profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_giftToSender` FOREIGN KEY (`sender`) REFERENCES `profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_receiverToGift` FOREIGN KEY (`gift`) REFERENCES `gifts` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `voucher_users`
  ADD CONSTRAINT `FK_userToVoucher` FOREIGN KEY (`user`) REFERENCES `profiles` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `FK_voucherToVoucher` FOREIGN KEY (`voucher`) REFERENCES `coin_vouchers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;