-- =====================================================================
-- Migration: Terms of Service Management
-- Date: 2026-09-01
-- Description: Adds TermsOfService (versioned legal documents) and
--              TermsOfServiceChange (audit/history) tables so the
--              super admin can edit and publish T&C / Privacy Policy
--              at any time and have the user popup reflect the current
--              published version.
-- =====================================================================

CREATE TABLE `TermsOfService` (
  `id`                VARCHAR(191)    NOT NULL,
  `createdAt`         DATETIME(3)     NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updatedAt`         DATETIME(3)     NOT NULL,
  `version`           INTEGER         NOT NULL DEFAULT 1,
  `documentType`      VARCHAR(64)     NOT NULL DEFAULT 'TERMS',
  `title`             VARCHAR(255)    NOT NULL,
  `content`           LONGTEXT        NOT NULL,
  `summary`           TEXT            NULL,
  `status`            VARCHAR(32)     NOT NULL DEFAULT 'DRAFT',
  `effectiveAt`       DATETIME(3)     NULL,
  `publishedAt`       DATETIME(3)     NULL,
  `requiresReconsent` BOOLEAN         NOT NULL DEFAULT FALSE,
  `createdById`       VARCHAR(191)    NULL,
  `publishedById`     VARCHAR(191)    NULL,
  `metadata`          JSON            NULL,

  PRIMARY KEY (`id`),
  UNIQUE KEY `TermsOfService_version_documentType_key` (`version`, `documentType`),
  INDEX `TermsOfService_documentType_idx` (`documentType`),
  INDEX `TermsOfService_status_idx` (`status`),
  INDEX `TermsOfService_effectiveAt_idx` (`effectiveAt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE `TermsOfServiceChange` (
  `id`              VARCHAR(191)    NOT NULL,
  `createdAt`       DATETIME(3)     NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `termsId`         VARCHAR(191)    NOT NULL,
  `previousVersion` INTEGER         NULL,
  `newVersion`      INTEGER         NOT NULL,
  `changeType`      VARCHAR(32)     NOT NULL DEFAULT 'EDIT',
  `changeSummary`   TEXT            NULL,
  `changedById`     VARCHAR(191)    NULL,
  `diff`            JSON            NULL,

  PRIMARY KEY (`id`),
  INDEX `TermsOfServiceChange_termsId_idx` (`termsId`),
  INDEX `TermsOfServiceChange_createdAt_idx` (`createdAt`),
  CONSTRAINT `TermsOfServiceChange_termsId_fkey`
    FOREIGN KEY (`termsId`) REFERENCES `TermsOfService` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;