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

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace ex_042_012_EF_CF_Dictionary
{

    /// <summary>
    /// espèce de procurateur qui enveloppe un Nounours afin de permettre son lien avec Entity Framework malgré le dictionnaire
    /// </summary>
    [Table("Nounours")]
    public class NounoursEx
    {
        /// <summary>
        /// le Nounours wrappé (n'est pas enregistré en base)
        /// </summary>
        [NotMapped]
        public Nounours Nounours
        {
            get; set;
        }

        /// <summary>
        /// wrapper sur la propriété UniqueId du Nounours.
        /// Cette clé n'est pas générée lors de l'insertion en base
        /// Elle est utilisée comme clé étrangère pour établier une relation one to one entre Nounours et Score.
        /// </summary>
        [Key, ForeignKey("Score")]
        public Guid UniqueId
        {
            get { return Nounours.UniqueId; }
            set { Nounours.UniqueId = value; }
        }

        /// <summary>
        /// le Score (permettra de remplacer le dictionnaire dans Lit)
        /// </summary>
        public Score Score
        {
            get; set;
        }

        public NounoursEx()
        {
            Nounours = new Nounours();
        }

        /// <summary>
        /// wrapper pour le nom du Nounours
        /// </summary>
        [Required]
        [MaxLength(256)]
        public string Nom
        {
            get { return Nounours.Nom; }
            set { Nounours.Nom = value; }
        }

        /// <summary>
        /// wrapper pour le nombre de poils du nounours
        /// </summary>
        public int NbPoils
        {
            get { return Nounours.NbPoils; }
            set { Nounours.NbPoils = value; }
        }

        /// <summary>
        /// wrapper pour la date de naissance du nounours
        /// </summary>
        [Column("Naissance")]
        public DateTime DateDeNaissance
        {
            get { return Nounours.DateDeNaissance; }
            set { Nounours.DateDeNaissance = value; }
        }

        public override string ToString()
        {
            return $"{UniqueId}: {Nom} ({DateDeNaissance:dd/MM/yyyy}, {NbPoils} poils)";
        }
    }
}
