package com.appolica.flubber.animation.providers;

import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.util.DisplayMetrics;
import android.view.View;

import com.appolica.flubber.AnimationBody;
import com.appolica.flubber.utils.DimensionUtils;

public class Fall extends BaseProvider {
    @Override
    public Animator createAnimationFor(AnimationBody animationBody, View view) {
        initInterpolatorFor(animationBody);
        return getAnimationFor(animationBody, view);
    }

    @Override
    public Animator getAnimationFor(AnimationBody animationBody, View view) {
        final AnimatorSet animatorSet = new AnimatorSet();

        final ObjectAnimator translateAnimation = getTranslation(animationBody, view);
        final ObjectAnimator rotateAnimation = getRotation(view);

        animatorSet
                .play(translateAnimation)
                .with(rotateAnimation);

        return animatorSet;
    }

    private ObjectAnimator getRotation(View view) {
        final float startRotation = view.getRotation();
        final float endRotation = (float) Math.toDegrees(15 * (Math.PI / 180));

        return ObjectAnimator.ofFloat(view, View.ROTATION, startRotation, endRotation);
    }

    private ObjectAnimator getTranslation(AnimationBody animationBody, View view) {
        final DisplayMetrics displayMetrics = DimensionUtils.getDisplayMetrics(view.getContext());

        final int startY = 0;
        final float endY = (displayMetrics.heightPixels - view.getY()) * animationBody.getForce();

        final ObjectAnimator animation = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y.getName(), startY, endY);

        animation.setInterpolator(getInterpolatorProvider().createInterpolatorFor(animationBody));

        return animation;
    }
}