import assert from 'node:assert/strict';
import sharp from 'sharp';
import { resizeUpload } from './resize-upload.mjs';

const source = await sharp({ create: { width: 100, height: 80, channels: 3, background: '#777' } }).jpeg().toBuffer();
const result = await resizeUpload([source.subarray(0, 20), source.subarray(20)]);
const metadata = await sharp(result).metadata();
assert.equal(metadata.format, 'webp');
assert.equal(metadata.width, 100);
await assert.rejects(resizeUpload([]), /Empty/);
await assert.rejects(resizeUpload([Buffer.alloc(2_500_001), Buffer.alloc(2_500_000)]), /5 MB/);
await assert.rejects(resizeUpload([Buffer.from('not an image')]));
await assert.rejects(resizeUpload([await sharp(source).png().toBuffer()]), /JPEG or WebP/);
const large = await sharp({ create: { width: 4001, height: 4000, channels: 3, background: '#777' } }).jpeg().toBuffer();
await assert.rejects(resizeUpload([large]), /pixel limit/i);
const frames = Buffer.alloc(2 * 2 * 3 * 2, 0);
frames.fill(255, frames.length / 2);
const animated = await sharp(frames, { raw: { width: 2, height: 4, channels: 3, pageHeight: 2 } })
  .webp({ loop: 0, delay: [100, 100] }).toBuffer();
assert.equal((await sharp(animated, { animated: true }).metadata()).pages, 2);
await assert.rejects(resizeUpload([animated]), /Animated/);
console.log('Upload boundary: valid, empty, chunked byte cap, corrupt, unsupported, pixel cap and animation checks passed');
