// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
//                         marc.chevaldonne.free.fr
//
// Module        : AlbumEF.cs
// Author        : Marc Chevaldonné
// Creation date : 2016-10-23
//
// ========================================================================

using System;
using System.Collections.Generic;
using System.Linq;

namespace ex_042_011_EF_CF_Many_to_Many_FluentAPI
{
    /// <summary>
    /// procurateur pour la classe Album
    /// </summary>
    public class AlbumEF : IAlbum
    {
        /// <summary>
        /// le sujet réel wrappé par le procurateur
        /// lorsqu'il est setté, la collection d'artistes est mise à jour
        /// </summary>
        public Album Album
        {
            get
            {
                return album;
            }
            set
            {
                album = value;
                UpdateArtistes();
            }
        }
        private Album album;

        /// <summary>
        /// collection d'AlbumArtiste pour le lien avec la table d'association
        /// </summary>
        public ICollection<AlbumArtiste> AlbumsArtistes
        {
            get
            {
                return albumsArtistes;
            }
            set
            {
                albumsArtistes = value;
                UpdateArtistes();
            }
        }
        private ICollection<AlbumArtiste> albumsArtistes = new List<AlbumArtiste>();

        private void UpdateArtistes()
        {
            if (Album != null && AlbumsArtistes != null)
            {
                foreach (var art in AlbumsArtistes.Select(aa => aa.Artiste.Artiste))
                {
                    Album.Artistes.Add(art);
                }
            }
        }

        public ICollection<Artiste> Artistes
        {
            get
            {
                return Album.Artistes;
            }
        }

        public DateTime DateDeSortie
        {
            get
            {
                return Album.DateDeSortie;
            }
            set
            {
                Album.DateDeSortie = value;
            }
        }

        public string Titre
        {
            get
            {
                return Album.Titre;
            }
            set
            {
                Album.Titre = value;
            }
        }

        private Guid uniqueId;

        public Guid UniqueId
        {
            get { return uniqueId; }
            set { uniqueId = value; Album.UniqueId = value; }
        }

    }
}
