/**
 * media_variants — PLANNING.md §6c, verbatim DDL.
 * One row per generated derivative (avif/webp at 640/1024/1600/2400 + one jpeg
 * at 1600w). is_primary marks the single JPEG that becomes the response `src`.
 * uq_variant (image_id, format, width) keeps regeneration idempotent.
 */
import type { Knex } from 'knex';

export async function up(knex: Knex): Promise<void> {
  await knex.schema.raw(`
    CREATE TABLE media_variants (
      id         BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
      image_id   CHAR(26) NOT NULL,
      format     ENUM('avif','webp','jpeg') NOT NULL,
      width      INT UNSIGNED NOT NULL,
      height     INT UNSIGNED NOT NULL,
      bytes      INT UNSIGNED NOT NULL,
      path       VARCHAR(255) NOT NULL,
      is_primary TINYINT(1) NOT NULL DEFAULT 0,
      UNIQUE KEY uq_variant (image_id, format, width),
      KEY idx_variant_image (image_id),
      CONSTRAINT fk_variant_image FOREIGN KEY (image_id) REFERENCES media_images(id) ON DELETE CASCADE
    ) ENGINE=InnoDB
  `);
}

export async function down(knex: Knex): Promise<void> {
  await knex.schema.raw('DROP TABLE IF EXISTS media_variants');
}
