// Copyright 2026 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type { WritableDB } from '../Interface.std.ts';

export default function updateToSchemaVersion1650(db: WritableDB): void {
  db.exec(`
      CREATE TABLE attachments_protected_from_deletion (
        path TEXT NOT NULL,
        UNIQUE (path)
      ) STRICT;
    `);

  db.exec(`
    CREATE INDEX message_attachments_plaintextHash ON message_attachments (plaintextHash);
  `);
  db.exec(`
    CREATE INDEX message_attachments_path ON message_attachments (path);
  `);
  db.exec(`
    CREATE INDEX message_attachments_thumbnailPath ON message_attachments (thumbnailPath);
  `);
  db.exec(`
    CREATE INDEX message_attachments_screenshotPath ON message_attachments (screenshotPath);
  `);
  db.exec(`
    CREATE INDEX message_attachments_backupThumbnailPath ON message_attachments (backupThumbnailPath);
  `);

  db.exec(`
    CREATE TRIGGER stop_protecting_attachments_after_update 
    AFTER UPDATE OF path, thumbnailPath, screenshotPath, backupThumbnailPath 
    ON message_attachments
    WHEN 
      OLD.path IS NOT NEW.path OR
      OLD.thumbnailPath IS NOT NEW.thumbnailPath OR
      OLD.screenshotPath IS NOT NEW.screenshotPath OR
      OLD.backupThumbnailPath IS NOT NEW.backupThumbnailPath
    BEGIN
      DELETE FROM attachments_protected_from_deletion 
      WHERE path IN (NEW.path, NEW.thumbnailPath, NEW.screenshotPath, NEW.backupThumbnailPath);
    END;
  `);

  db.exec(`
    CREATE TRIGGER stop_protecting_attachments_after_insert 
    AFTER INSERT 
    ON message_attachments
    BEGIN
      DELETE FROM attachments_protected_from_deletion 
      WHERE path IN (NEW.path, NEW.thumbnailPath, NEW.screenshotPath, NEW.backupThumbnailPath);
    END;
  `);
}
