﻿using AsmodeeDigital.Common.Plugin.Utils.Extensions;
using AsmodeeDigital.PlayReal.Plugin.Domain.Players;
using AsmodeeDigital.PlayReal.Plugin.Manager.Persistence;
using AsmodeeDigital.PlayReal.Samples.Domain.Game;
using System;
using System.Collections.Generic;

namespace AsmodeeDigital.PlayReal.Samples.Logic.Gameplay
{
    /// <summary>
    /// Local gameplay logic
    /// </summary>
    [Serializable]
    public class LocalGameplayLogic : GameplayLogicBase
    {
        public LocalGameplayLogic(Persistence persistence, List<Die> dice) : base(null, persistence, dice)
        {
            PlayersSeats = new List<IPlayerSeat>(persistence.PlayerSeats);
        }

        /// <summary>
        /// Initialize local gameplay logic. Called by the view
        /// </summary>
        public override void Init()
        {
            base.Init();

            GameState.NextPlayers = PlayersSeats.ConvertAll<int>(ps => ps.LocalId);
            UpdateNextPlayer(GameState.NextPlayers, true);
        }

        /// <summary>
        /// End of turn of local player. Set next player and start AI turn if needed
        /// </summary>
        public override void NextPlayer()
        {
            int idNextPlayer = GameState.NextPlayers.First();

            //--- Move first player in last position
            GameState.NextPlayers.RemoveAt(0);
            GameState.NextPlayers.Add(idNextPlayer);
            //---

            UpdateNextPlayer(GameState.NextPlayers, true);
        }

        /// <summary>
        /// Set game over
        /// </summary>
        public override void GameOver()
        {
            SetGameOutcome(true);
        }
    }
}