using CD67.FicheCollege.Entity;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace CD67.FicheCollege.MVC.Models
{
    public enum ModeAcces
    {
        [Display(Prompt = "Ajouter")]
        Creation,
        [Display(Prompt = "Lire")]
        Lecture,
        [Display(Prompt = "Modifier")]
        Modification,
        [Display(Prompt = "Supprimer")]
        Suppression
    }

    // Wrapper du modele qui permet d'emmener des informations supplementaires avec celui-ci.
    public abstract class BaseViewModel<T>
    {
        public T Obj;

        public abstract int Annee_Id { get; }
        public abstract string Annee_Lib { get; }

        // (Facultatif) Mode d'accès à la page
        // Defaut: Lecture
        public ModeAcces Acces { get; set; }

        // (Facultatif) Permet d'emporter d'éventuelles données complémentaires
        // comme les listes qui serviront entre autre à peupler les listes déroulantes.
        public Dictionary<string, object> Bag { get; set; } = new Dictionary<string, object>();

        // Utilisateur courant
        public UtilisateurConnecte User;

        // ***************************
        // Constructeurs de base
        public BaseViewModel(T model,
            ModeAcces acces = ModeAcces.Lecture,
            Dictionary<string, object> bag = null)
        {
            Obj = model;
            Acces = acces;
            if (bag != null)
                Bag = bag;
            User = Internal.UtilisateurConnecteFactory.getUtilisateurConnecte();
        }

        public BaseViewModel(T model,
            Entities dbContext,
            ModeAcces acces = ModeAcces.Lecture,
            Dictionary<string, object> bag = null)
        {
            Obj = model;
            Acces = acces;
            if (bag != null)
                Bag = bag;
            User = Internal.UtilisateurConnecteFactory.getUtilisateurConnecte();
        }

    }
}