using UnityEngine;
using System;

public enum EasingType{
    Linear,
    Smooth,
}

public abstract class SomethingTo : MonoBehaviour {


    private float lerp = 1.0f;
    private float speed = 1.0f;
    protected Action<float> update = ActionExtensions.EmptyActionFloat;
    protected Action callback = ActionExtensions.EmptyAction;

    protected void Begin(Action<float>update, float interval, Action callback, EasingType easingType = EasingType.Linear){
        SetUpdate(update, easingType);
        this.callback = callback;
        speed = 1.0f / interval;
        lerp = 0.0f;
    }
    
    private void SetUpdate(Action<float>update, EasingType easingType){
        switch(easingType){
        case EasingType.Smooth:
            this.update = lerp => {
                update(AnimationCurveExtensions.Smooth01.Evaluate(lerp));
            };
            break;
        default:
            this.update = update;
            break;
        }
    }
    
    public void Stop(){
        lerp = 1.0f;
//        update(lerp);
//        callback();
    }

    void Update(){
        if(lerp < 1.0f){
            lerp += Time.deltaTime * speed;
            if(lerp >= 1.0f){
                lerp = 1.0f;
                update(lerp);
                callback();
            }else{
                update(lerp);
            }
        }
    }
}
