using System;
using System.IO;
using System.Threading.Tasks;

namespace Aurora.Models.Media
{
    public abstract class BaseMedia
    {
        private Stream _stream;

        public BaseMedia()
        {
            Id = Guid.NewGuid().ToString();
        }

        #region Properties
        public string Id { get; protected set; }

        public abstract MediaTypeEnum MediaType { get; }

        public abstract BaseMetadata Metadata { get; protected set; }

        public bool IsLoaded
        {
            get
            {
                return DataStream != null;
            }
        }

        #endregion Properties

        public virtual Task Load()
        {
            return Task.FromResult(default(object));
        }

        public virtual void Unload()
        {
        }


        /// <summary>
        /// Gets or sets the data stream that holds the song.
        /// </summary>
        /// <value>The data stream.</value>
        public Stream DataStream
        {
            get
            {
                return _stream;
            }
            protected set
            {
                if (value != _stream)
                {
                    _stream = value;
                }
            }
        }
    }
}