package com.reactnativenavigation.views.element.animators;

import android.animation.TypeEvaluator;
import android.graphics.Rect;

public class ClipBoundsEvaluator implements TypeEvaluator<Rect> {
    private int fromWidth;
    private int fromHeight;
    private int toWidth;
    private int toHeight;
    private final Rect result = new Rect();

    @Override
    public Rect evaluate(float ratio, Rect from, Rect to) {
        sync(from, to);

        if (toHeight == fromHeight ) {
            result.bottom = toHeight;
        } else {
            if (toHeight > fromHeight) {
                result.bottom = (int) (toHeight - (toHeight - fromHeight) * (1 - ratio));
            } else {
                result.bottom = (int) (toHeight + (fromHeight - toHeight) * (1 - ratio));
            }
        }

        if (toWidth == fromWidth) {
            result.right = toWidth;
        } else {
            if (toWidth > fromWidth) {
                result.right = (int) (toWidth - (toWidth - fromWidth) * (1 - ratio));
            } else {
                result.right = (int) (toWidth + (fromWidth - toWidth) * (1 - ratio));
            }
        }
        return result;
    }

    private void sync(Rect from, Rect to) {
        fromWidth = from.right;
        fromHeight = from.bottom;
        toWidth = to.right;
        toHeight = to.bottom;
    }
}
