///Licensed under Creative Commons Attribution 4.0 License, Written by Clemens Winter
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Exploitation
{
    /// <summary>
    /// Interaction with Ressource object
    /// </summary>
    public abstract class Ressource
    {
        protected readonly int id;
        int xPos, yPos, zPos;
        string name;

        public Ressource(int id, int xPos, int yPos, int zPos, string name)
        {
            this.id = id;
            this.xPos = xPos;
            this.yPos = yPos;
            this.zPos = zPos;
            this.name = name;
        }

        public abstract RewardStruct DeliverReward(int mealMax, long time, int numVisit);

        public abstract void ResetRessources();
        public abstract string getSeed();

        internal abstract TransferParticles CheckForTransferToAgent();
        
        internal abstract void TransferToRessource(TransferParticles transferParticles);


        public int XPos { get { return xPos; } }
        public int YPos { get { return yPos; } }
        public int ZPos { get { return zPos; } }
        public int ID { get { return id; } }
        public string Genotype { get { return name; } }
    }
}
