using CD67.ModeleMVC.Entity;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CD67.ModeleMVC.Factory
{
    public class TYPE_VIKINGFactory : Internal.BaseFactory
    {
        /// <summary>
        /// Constructeur public lié au constructeur de base
        /// </summary>
        /// <param name="dbContext">Context Entity Framework utilisé dans la classe</param>
        public TYPE_VIKINGFactory(Entities dbContext) : base(dbContext) { }

        /// <summary>
        /// Retourne un objet par son Id
        /// </summary>
        /// <param name="Id">Id recherché</param>
        /// <returns>Objet recherché</returns>
        public EXEMPLE_TYPE_VIKING getById(int Id)
        {
            return dbContext.EXEMPLE_TYPE_VIKING.Find(Id);
        }

        /// <summary>
        /// Retourne tous les objets
        /// </summary>
        /// <returns>Liste d'objets</returns>
        public List<EXEMPLE_TYPE_VIKING> getAll()
        {
            //avec un tri parceque c'est toujours mieux quand c'est trié
            return dbContext.EXEMPLE_TYPE_VIKING.OrderBy(item => item.TYPE).ToList();
        }

        /// <summary>
        /// Ajout de l'objet dans le context
        /// </summary>
        /// <param name="param">Objet à ajouter passé en référence pour obtenir le résultat des triggers ou numéroauto</param>
        public void add(ref EXEMPLE_TYPE_VIKING param)
        {
            dbContext.EXEMPLE_TYPE_VIKING.Add(param);
            dbContext.SaveChanges();
        }

        /// <summary>
        /// Mise à jour de l'objet dans le context
        /// </summary>
        /// <param name="param">Objet à mettre à jour passé en référence pour obtenir le résultat des triggers ou numéroauto</param>
        public void update(ref EXEMPLE_TYPE_VIKING param)
        {
            // On attache l'objet en paramètre au contexte, on le note bien comme modifié pour qu'il soit mis à jour
            dbContext.EXEMPLE_TYPE_VIKING.Attach(param);
            dbContext.Entry(param).State = EntityState.Modified;
            dbContext.SaveChanges();
        }

        /// <summary>
        /// Suppression de l'objet dans le context
        /// </summary>
        /// <param name="param">Objet à supprimer</param>
        public void delete(ref EXEMPLE_TYPE_VIKING param)
        {
            // Attention à ajouter ici d'éventuel contrôle ou suppression en cascade
            dbContext.EXEMPLE_TYPE_VIKING.Remove(param);
            dbContext.SaveChanges();
        }
    }
}
