using MediaBrowser.Common.IO;
using MediaBrowser.Model.Logging;
using System;
namespace MediaBrowser.IsoMounter
{
    /// 
    /// Class IsoMount
    /// 
    internal class PismoMount : IIsoMount
    {
        /// 
        /// Gets or sets the iso path.
        /// 
        /// The iso path.
        public string IsoPath { get; internal set; }
        /// 
        /// Gets the mounted path.
        /// 
        /// The mounted path.
        public string MountedPath { get; internal set; }
        /// 
        /// The PFM file mount
        /// 
        private PfmFileMount _pfmFileMount;
        /// 
        /// The _iso manager
        /// 
        private readonly PismoIsoManager _isoManager;
        /// 
        /// Gets or sets the logger.
        /// 
        /// The logger.
        private ILogger Logger { get; set; }
        /// 
        /// Prevents a default instance of the  class from being created.
        /// 
        /// The mount.
        /// The iso path.
        /// The iso manager.
        /// The logger.
        internal PismoMount(PfmFileMount mount, string isoPath, PismoIsoManager isoManager, ILogger logger)
        {
            _pfmFileMount = mount;
            IsoPath = isoPath;
            _isoManager = isoManager;
            Logger = logger;
            MountedPath = mount.GetMount().GetUncName();
        }
        /// 
        /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
        /// 
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        /// 
        /// Releases unmanaged and - optionally - managed resources.
        /// 
        /// true to release both managed and unmanaged resources; false to release only unmanaged resources.
        protected virtual void Dispose(bool dispose)
        {
            UnMount();
        }
        /// 
        /// Uns the mount.
        /// 
        private void UnMount()
        {
            if (_pfmFileMount != null)
            {
                Logger.Info("Unmounting {0}", IsoPath);
                _pfmFileMount.Cancel();
                _pfmFileMount.Detach();
                _isoManager.OnUnmount(this);
                _pfmFileMount.Dispose();
                _pfmFileMount = null;
            }
        }
    }
}