"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.methods = void 0;
const image_q_1 = require("image-q");
const zod_1 = __importDefault(require("zod"));
const QuantizeOptionsSchema = zod_1.default.object({
    colors: zod_1.default.number().optional(),
    colorDistanceFormula: zod_1.default
        .union([
        zod_1.default.literal("cie94-textiles"),
        zod_1.default.literal("cie94-graphic-arts"),
        zod_1.default.literal("ciede2000"),
        zod_1.default.literal("color-metric"),
        zod_1.default.literal("euclidean"),
        zod_1.default.literal("euclidean-bt709-noalpha"),
        zod_1.default.literal("euclidean-bt709"),
        zod_1.default.literal("manhattan"),
        zod_1.default.literal("manhattan-bt709"),
        zod_1.default.literal("manhattan-nommyde"),
        zod_1.default.literal("pngquant"),
    ])
        .optional(),
    paletteQuantization: zod_1.default
        .union([
        zod_1.default.literal("neuquant"),
        zod_1.default.literal("neuquant-float"),
        zod_1.default.literal("rgbquant"),
        zod_1.default.literal("wuquant"),
    ])
        .optional(),
    imageQuantization: zod_1.default
        .union([
        zod_1.default.literal("nearest"),
        zod_1.default.literal("riemersma"),
        zod_1.default.literal("floyd-steinberg"),
        zod_1.default.literal("false-floyd-steinberg"),
        zod_1.default.literal("stucki"),
        zod_1.default.literal("atkinson"),
        zod_1.default.literal("jarvis"),
        zod_1.default.literal("burkes"),
        zod_1.default.literal("sierra"),
        zod_1.default.literal("two-sierra"),
        zod_1.default.literal("sierra-lite"),
    ])
        .optional(),
});
exports.methods = {
    /**
     * Image color number reduction.
     */
    quantize(image, options) {
        const { colors, colorDistanceFormula, paletteQuantization, imageQuantization, } = QuantizeOptionsSchema.parse(options);
        const inPointContainer = image_q_1.utils.PointContainer.fromUint8Array(image.bitmap.data, image.bitmap.width, image.bitmap.height);
        const palette = (0, image_q_1.buildPaletteSync)([inPointContainer], {
            colors,
            colorDistanceFormula,
            paletteQuantization,
        });
        const outPointContainer = (0, image_q_1.applyPaletteSync)(inPointContainer, palette, {
            colorDistanceFormula,
            imageQuantization,
        });
        image.bitmap.data = Buffer.from(outPointContainer.toUint8Array());
        return image;
    },
};