package com.cr.pages

import android.view.animation.Animation
import android.view.animation.AnimationUtils
import androidx.fragment.app.FragmentTransaction
import com.cr.cruav.R

/**
 * 操作系统：MAC系统
 * 创建者：王成
 * 创建日期：2023/3/10 08:51
 * 描述：Fragment 公共基础类（动画）
 */
open class CrAnimationFragment : CrFragment() {
    /**
     * 动画方向
     */
    enum class AnimationDirection{
        /**
         * 左侧
         */
        LEFT,

        /**
         * 右侧
         */
        RIGHT,
    }

    // todo: 2023/4/11 动画方向 默认为左侧弹出 右侧推出
    private var animationDirection:AnimationDirection = AnimationDirection.LEFT

    /**
     * 设置动画方向
     * @param animationDirection AnimationDirection 动画方向
     */
    fun setAnimationDirection(animationDirection: AnimationDirection){
        this.animationDirection = animationDirection
    }

    /**
     * 重写左侧滑动动画效果
     * @param transit Int
     * @param enter Boolean
     * @param nextAnim Int
     * @return Animation?
     */
    override fun onCreateAnimation(transit: Int, enter: Boolean, nextAnim: Int): Animation? {
        var animInRes:Int = -1
        var animOutRes:Int = -1
        if(animationDirection == AnimationDirection.LEFT){
            animInRes = R.anim.slide_left_in
            animOutRes = R.anim.slide_left_out
        }else if(animationDirection == AnimationDirection.RIGHT){
            animInRes = R.anim.slide_right_in
            animOutRes = R.anim.slide_right_out
        }
        // todo: 2023/4/6 表示是一个进入动作，比如add.show等
        if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) {
            if (enter) {
                // todo: 2023/4/6 普通的进入的动作
                return AnimationUtils.loadAnimation(context, animInRes);
            } else {
                // todo: 2023/4/6 比如一个已经Fragment被另一个replace，是一个进入动作，被replace的那个就是false
                return AnimationUtils.loadAnimation(context, animOutRes);
            }
        } else if (transit == FragmentTransaction.TRANSIT_FRAGMENT_CLOSE) {
            // todo: 2023/4/6 表示一个退出动作，比如出栈，hide，detach等
            if (enter) {
                // todo: 2023/4/6 之前被replace的重新进入到界面或者Fragment回到栈顶
                return AnimationUtils.loadAnimation(context, animInRes);
            } else {
                // todo: 2023/4/6 Fragment退出，出栈
                return AnimationUtils.loadAnimation(context, animOutRes);
            }
        }
        return null
    }
}