using System;
using System.Collections;
using System.Collections.Generic;
using PkmnLibSharp.Utilities;

namespace PkmnLibSharp.Battling.History
{
    public sealed class HistoryHandler : PointerWrapper
    {
        internal HistoryHandler(IntPtr ptr) : base(ptr){}

        public HistoryElement? TopElement
        {
            get
            {
                var ptr = Creaturelib.Generated.HistoryHandler.GetTopElement(Ptr);
                return HistoryElement.Construct(ptr);
            }
        }
        
        public HistoryElement? GetLastUsedMove()
        {
            var ptr = Creaturelib.Generated.HistoryHandler.GetLastUsedAttack(Ptr);
            return HistoryElement.Construct(ptr);
        }

        public IEnumerable<HistoryElement> GetIterator()
        {
            var top = TopElement;
            if (top == null) yield break;
            while (top != null)
            {
                yield return top;
                top = top.GetPrevious();
            }
        }

        protected override void DeletePtr()
        {
            
        }
    }
}