﻿using JLGames.RocketDriver.Actions.Utils;
using JLGames.RocketDriver.CSharp.DateTimex;
using UnityEngine;

namespace JLGames.RocketDriver.Samples.OtherDemo
{
    public class TestTimeSeries : MonoBehaviour
    {
        private TimeSeries m_Series;
        private string m_State;
        private long m_Stamp = 0;

        private void Start()
        {
            InitTest();
        }

        private void InitTest()
        {
            m_Series = new TimeSeries(DateTimeUtil.NowTicks1970, true);
            m_Series.AddSlice("Ready", 1 * DateTimeUtil.TicksPerSecond);
            m_Series.AddSlice("Doing", 3 * DateTimeUtil.TicksPerSecond);
            m_Series.AddSlice("Death", 1 * DateTimeUtil.TicksPerSecond);
            m_Series.AddSlice("CD", (long) (0.5 * DateTimeUtil.TicksPerSecond));
        }

        private void FixedUpdate()
        {
            var now = DateTimeUtil.NowTicks1970;
            var state = m_Series.LocateTo(now);
            if (state == m_State) return;

            if (string.IsNullOrEmpty(m_State) || m_Stamp == 0)
            {
                DebugUtil.Log("State:", m_State, "New");
            }
            else
            {
                DebugUtil.Log("State:", m_State, 1.0f * (now - m_Stamp) / DateTimeUtil.TicksPerMilliSecond);
            }

            m_State = state;
            m_Stamp = now;
        }

        public void OnSliceStart(string sliceName)
        {
            DebugUtil.Log("OnSliceStart:", sliceName);
        }

        public void OnSliceEnd(string sliceName)
        {
            DebugUtil.Log("OnSliceEnd:", sliceName);
        }

        public void OnSliceChage(string newSliceName, string oldSliceName)
        {
            DebugUtil.Log("OnSliceChange:", oldSliceName, "=>", newSliceName);
        }
    }
}