import { type Lumina } from '../index.js';
export interface ImageEditingOptions {
grayscale?: boolean;
brightness?: number;
contrast?: number;
sepia?: boolean;
ascii?: boolean | Record<string, unknown>;
blur?: number;
gaussianBlur?: number;
watermark?: { text: string; options?: Record<string, unknown> };
backgroundBlur?: Record<string, unknown>;
sharpen?: boolean;
emboss?: boolean;
edgeDetection?: boolean;
resize?: { width: number; height: number };
crop?: { x: number; y: number; width: number; height: number };
}
/**
* Applies the provided ImageEditingOptions to a Lumina instance.
* @param chain The Lumina chain instance
* @param options The options to apply
* @returns The modified Lumina chain instance
*/
export function applyEditingOptions(
chain: Lumina,
options: ImageEditingOptions,
): Lumina {
let c = chain;
if (options.grayscale) c = c.grayscale();
if (options.brightness !== undefined) c = c.brightness(options.brightness);
if (options.contrast !== undefined) c = c.contrast(options.contrast);
if (options.sepia) c = c.sepia();
if (options.ascii) {
c = c.ascii(typeof options.ascii === 'boolean' ? {} : options.ascii);
}
if (options.blur !== undefined) c = c.blur(options.blur);
if (options.gaussianBlur !== undefined)
c = c.gaussianBlur(options.gaussianBlur);
if (options.watermark) {
c = c.watermark(options.watermark.text, options.watermark.options);
}
if (options.backgroundBlur) {
c = c.backgroundBlur(options.backgroundBlur);
}
if (options.sharpen) c = c.sharpen();
if (options.emboss) c = c.emboss();
if (options.edgeDetection) c = c.edgeDetection();
if (options.resize) {
c = c.resize(options.resize.width, options.resize.height);
}
if (options.crop) {
c = c.crop(
options.crop.x,
options.crop.y,
options.crop.width,
options.crop.height,
);
}
return c;
}