﻿namespace EPSILive.ViewModel
{
    public class ViewModelLocator
    {
        #region ViewModels privés 

        /// <summary>
        /// ArtisteViewModel
        /// </summary>
        private static ArtisteViewModel _artisteVM;

        /// <summary>
        /// ArtistesViewModel
        /// </summary>
        private static ArtistesViewModel _artistesVM;

        /// <summary>
        /// MainViewModel
        /// </summary>
        private static AccueilViewModel _accueilVM;

        /// <summary>
        /// OrganisateursViewModel
        /// </summary>
        private static OrganisateursViewModel _organisateursVM;

        /// <summary>
        /// PartenairesViewModel
        /// </summary>
        private static PartenairesViewModel _partenairesVM;

        #endregion

        #region ViewModels publics

        /// <summary>
        /// Retourne l'ArtistesViewModel
        /// </summary>
        public static ArtistesViewModel ArtistesVM
        {
            get { return _artistesVM ?? (_artistesVM = new ArtistesViewModel()); }
        }

        /// <summary>
        /// Retourne l'ArtisteViewModel
        /// </summary>
        public static ArtisteViewModel ArtisteVM
        {
            get { return _artisteVM ?? (_artisteVM = new ArtisteViewModel()); }
        }

        /// <summary>
        /// Retourne l'AccueilViewModel
        /// </summary>
        public static AccueilViewModel AccueilVM
        {
            get { return _accueilVM ?? (_accueilVM = new AccueilViewModel()); }
        }

        /// <summary>
        /// Retourne l'OrganisateursViewModel
        /// </summary>
        public static OrganisateursViewModel OrganisateursVM
        {
            get { return _organisateursVM ?? (_organisateursVM = new OrganisateursViewModel()); }
        }

        /// <summary>
        /// Retourne le PartenairesViewModel
        /// </summary>
        public static PartenairesViewModel PartenairesVM
        {
            get { return _partenairesVM ?? (_partenairesVM = new PartenairesViewModel()); }
        }

        #endregion

        #region Méthodes de nettoyage

        /// <summary>
        /// Nettoie l'ArtistesViewModel
        /// </summary>
        public static void CleanArtistes()
        {
            _artistesVM = null;
        }

        /// <summary>
        /// Nettoie l'ArtisteViewModel
        /// </summary>
        public static void CleanArtiste()
        {
            _artisteVM = null;
        }

        /// <summary>
        /// Nettoie le MainViewModel
        /// </summary>
        public static void CleanAccueil()
        {
            _accueilVM = null;
        }

        /// <summary>
        /// Nettoie l'OrganisateursViewModel
        /// </summary>
        public static void CleanOrganisateurs()
        {
            _organisateursVM = null;
        }

        /// <summary>
        /// Nettoie le PartenairesViewModel
        /// </summary>
        public static void CleanPartenaires()
        {
            _partenairesVM = null;
        }

        /// <summary>
        /// Nettoie tous les ViewModels
        /// </summary>
        public static void CleanAll()
        {
            CleanArtiste();
            CleanArtistes();
            CleanAccueil();
            CleanOrganisateurs();
            CleanPartenaires();
        }

        #endregion
    }
}
