using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CzokoŚmieciarka.MonoGameView.DataModels.Interfaces.Garbage
{
    public abstract class AGarbage : IGarbage
    {
        protected AGarbage(ITypeOfGarbage typeOfGarbage, double weight)
        {
            this.TypeOfGarbage = typeOfGarbage;
            this.Weight = weight;
        }

        public ITypeOfGarbage TypeOfGarbage { get; }

        public virtual double Weight { get; set; }

        public virtual double Volume
        {
            get { return (double) this.Weight / TypeOfGarbage.Density; }
        }

        protected abstract AGarbage Add(AGarbage garbageToAdd);
        protected abstract AGarbage Subtract (AGarbage garbageToSubtract);

        #region Operators

        public static AGarbage operator + (AGarbage a, AGarbage b)
        {
            return a.Add(b);
        }

        public static AGarbage operator - (AGarbage a, AGarbage b)
        {
            return a.Subtract(b);
        }

        #endregion

        public virtual object Clone()
        {
            return new NotImplementedException("xD");
        }
    }
}