using System;
using System.IO;

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

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

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

        #endregion Properties

        public virtual void Load()
        {
            _loaded = true;
        }

        public virtual void Unload()
        {
            _loaded = false;
        }

        public abstract MediaTypeEnum MediaType { get; }

        public abstract BaseMetadata Metadata { get; protected set; }


        /// <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;
                }
            }
        }
    }
}
