#include "states.h"

States::States()
{
    currentIndex=0;
}

void States::appendState(ItemManager Item)
{
    //если после Undo происходит запись состояний, то фиксируем "путь" откатов
    if(indexHistory.size()>0)
    {
        for(int i=states.size()-2; i>=indexHistory[currentIndex]; i--)
        {
            indexHistory.append(i);
        }
    }
    states.append(Item);
    indexHistory.append(states.size()-1);
    currentIndex=indexHistory.size()-1;
}
// <-
ItemManager States::undo()
{
    if(!isFirst())
    {
        currentIndex--;
        return states[indexHistory[currentIndex]];
    }
    else return 0;
}
// ->
ItemManager States::redo() 
{
    if(!isLast())
    {
        currentIndex++;
        return states[indexHistory[currentIndex]];
    }
    else return 0;
}

bool States::isFirst()
{
    if(currentIndex == 0)
        return true;
    else
        return false;
}

bool States::isLast()
{
    if(indexHistory.size()-1 == currentIndex)
        return true;
    else
        return false;
}

void States::clear()
{
    currentIndex=0;
    indexHistory.clear();
    states.clear();
}
