#include "core/ui/prune_button.h"

// prune_button — pure implementation. See prune_button.h.

namespace reasampler::ui {

ButtonRect computePruneButton(const FooterRect& footer, const PruneButtonSpec& spec) {
    if (footer.width <= 0 || footer.height <= 0) return ButtonRect{};  // degenerate footer
    if (spec.buttonWidth <= 0) return ButtonRect{};                    // nothing to place

    // Right-anchored: right edge inset from the footer's right; width fixed.
    const int right = footer.x + footer.width - spec.rightInset;
    const int left = right - spec.buttonWidth;

    // Suppress if the button would encroach past the reserved left inset (tail label room)
    // or spill off the left of the footer entirely.
    if (left < footer.x + spec.minLeftInset) return ButtonRect{};

    // Vertically centred by the inset; clamp so a thin footer never yields a negative height.
    int top = footer.y + spec.verticalInset;
    int height = footer.height - 2 * spec.verticalInset;
    if (height <= 0) {
        top = footer.y;
        height = footer.height;
    }

    return ButtonRect{left, top, spec.buttonWidth, height};
}

bool hitTestPruneButton(int px, int py, const ButtonRect& button) {
    if (button.empty()) return false;  // suppressed button claims nothing
    return px >= button.x && px < button.x + button.width &&
           py >= button.y && py < button.y + button.height;
}

} // namespace reasampler::ui
