﻿using System.Collections.Generic;
using JLGames.RocketDriver.CSharp.Event;

namespace JLGames.RocketDriver.Actions.ThreadEvent
{
    internal struct ThreadEventRecord
    {
        public EventGroup Group;
        public EventData Data;
    }
    
    internal static class ThreadEventRecords
    {
        private static readonly List<ThreadEventRecord> m_Records = new List<ThreadEventRecord>();

        public static void RecordEvent(EventGroup group, EventData data)
        {
            lock (m_Records)
            {
                m_Records.Add(new ThreadEventRecord
                {
                    Group = group,
                    Data = data
                });
            }
        }

        public static void ClearEvents()
        {
            lock (m_Records)
            {
                if (m_Records.Count > 0)
                {
                    m_Records.Clear();
                }
            }
        }

        public static bool HaveEvents
        {
            get
            {
                lock (m_Records)
                {
                    return m_Records.Count > 0;
                }
            }
        }

        public static void HandleEvents()
        {
            lock (m_Records)
            {
                if (m_Records.Count == 0) return;
                foreach (var er in m_Records)
                {
                    er.Group.Handle(er.Data);
                }

                m_Records.Clear();
            }
        }
    }
}