KoogleV4/GameHandler/GameStateHandler.cs

121 lines
3.4 KiB
C#

using GameModel;
using GameModel.Contract;
using GameModel.Contracts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GameHandler
{
class GameStateHandlerItem<T>
{
internal Guid GameStateId;
internal bool Saved;
internal T Data;
public GameStateHandlerItem(Guid gameStateId, T data, bool saved)
{
GameStateId = gameStateId;
Saved = saved;
Data = data;
}
}
public class GameStateHandler
{
private Guid _gameStateId;
private List<GameStateHandlerItem<GameState>> gameStates = new List<GameStateHandlerItem<GameState>>();
private List<GameStateHandlerItem<ExpenseModel>> expenseModels = new List<GameStateHandlerItem<ExpenseModel>>();
private List<GameStateHandlerItem<MemberExpense>> memberExpenses = new List<GameStateHandlerItem<MemberExpense>>();
private IGameRepository _gameRepository;
private IExpenseRepository _expenseRepository;
public GameStateHandler(IGameRepository gameRepository, IExpenseRepository expenseRepository)
{
_gameRepository = gameRepository;
_expenseRepository = expenseRepository;
}
public ExpenseModel ExpenseModel
{
get
{
var res = expenseModels.LastOrDefault();
if (res != null)
{
return res.Data;
}
return null;
}
}
public GameState GameState
{
get
{
var res = gameStates.LastOrDefault();
if (res != null)
{
return res.Data;
}
return null;
}
}
internal void Add(ExpenseModel expenseModel)
{
if (ExpenseModel != null)
{
if (!expenseModel.Equals(ExpenseModel))
{
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false));
Save();
}
}
else
{
expenseModels.Add(new GameStateHandlerItem<ExpenseModel>(_gameStateId, expenseModel, false));
Save();
}
foreach(var memberExpense in expenseModel.MemberExpenses.Where(_ => memberExpenses.Any(me => me.Data.Id.Equals(_.Id))))
{
memberExpenses.Add(new GameStateHandlerItem<MemberExpense>(_gameStateId,memberExpense,false));
}
}
internal void Add(GameState newState)
{
if (!newState.Equals(GameState))
{
_gameStateId = Guid.NewGuid();
gameStates.Add(new GameStateHandlerItem<GameState>(_gameStateId, newState, false));
Save();
}
}
private void Save()
{
foreach (var item in gameStates.Where(_ => !_.Saved))
{
_gameRepository.Save(item.Data);
item.Saved = true;
}
foreach (var item in memberExpenses)
{
_expenseRepository.Save(item.Data);
item.Saved = true;
}
}
public void Undo()
{
}
}
}