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

namespace CD67.FicheCollege.Entity
{
    /// <summary>
    /// Classe d'extension de celle d'Entity, nécessaire pour y associer les Metadata
    /// </summary>
    [MetadataType(typeof(College_Metadata))]
    public partial class College
    {
        public string AdresseComplete => $"{this.Adresse}\n{this.Code_Postal} {this.Commune}";

        public WsExternes.Agent principal;
        public WsExternes.Agent adjoint;
        public WsAgents.Agent gestionnaire1;
        public WsAgents.Agent gestionnaire2;
        public Dictionary<string, string> educfData = new Dictionary<string, string>();

        // Charge les données d'identité des agents depuis le web-service
        public void hydrate()
        {
            Entity.WsExternes.WsExternes wsExternes = new Entity.WsExternes.WsExternes();
            wsExternes.UseDefaultCredentials = true;
            Entity.WsAgents.WsAgents wsAgents = new Entity.WsAgents.WsAgents();
            wsAgents.UseDefaultCredentials = true;

            if (!String.IsNullOrEmpty(PrincipalSid))
            {
                principal = wsExternes.GetById(PrincipalSid);
            }
            if (!String.IsNullOrEmpty(AdjointSid))
            {
                adjoint = wsExternes.GetById(AdjointSid);
            }
            if (!String.IsNullOrEmpty(Gestionnaire1Sid))
            {
                gestionnaire1 = wsAgents.GetById(Gestionnaire1Sid);
            }
            if (!String.IsNullOrEmpty(Gestionnaire2Sid))
            {
                gestionnaire2 = wsAgents.GetById(Gestionnaire2Sid);
            }

        }

        public College flat()
        {
            return new College()
            {
                Id = Id,
                Annee_Id = Annee_Id,
                CodeRne = CodeRne,
                Libelle = Libelle,
                Adresse = Adresse,
                Code_Postal = Code_Postal,
                TypeCollege_Id = TypeCollege_Id,
                Commune_Insee = Commune_Insee,
                Commune = Commune,
                Canton = Canton,
                Territoire_Id = Territoire_Id,
                TAD = TAD,
                CDC = CDC,
                Tel = Tel,
                Fax = Fax,
                Email = Email,
                PrincipalSid = PrincipalSid,
                AdjointSid = AdjointSid,
                Gestionnaire1Sid = Gestionnaire1Sid,
                Gestionnaire2Sid = Gestionnaire2Sid,
                TokenId = TokenId,
                RestaurationType_Id = RestaurationType_Id
            };
    }

}

    /// <summary>
    /// Classe contenant les DataAnnotations pour chaque champ
    /// </summary>
    public class College_Metadata
    {
        [Required]
        public string Id { get; set; }

        [Required]
        [Display(Name = "Code RNE du collège")]
        public string CodeRne { get; set; }

        [Required]
        [Display(Name = "Année scolaire")]
        public string Annee_Id { get; set; }

        [Required]
        [Display(Name = "Nom")]
        public string Libelle { get; set; }

        [Display(Name = "Adresse")]
        public string Adresse { get; set; }

        [Display(Name = "Code postal")]
        public string Code_Postal { get; set; }

        [Display(Name = "Type d'établissement")]
        public int TypeCollege_Id { get; set; }

        [Display(Name = "Code INSEE")]
        public string Commune_Insee { get; set; }

        [Required]
        [Display(Name = "Commune")]
        public string Commune { get; set; }

        [Display(Name = "Canton de rattachement")]
        public string Canton { get; set; }

        [Display(Name = "Territoire de rattachement")]
        public string Territoire_Id { get; set; }

        [Display(Name = "TAD")]
        public string TAD { get; set; }

        [Display(Name = "CDC")]
        public string CDC { get; set; }

        [Display(Name = "Téléphone")]
        public string Tel { get; set; }

        [Display(Name = "Fax")]
        public string Fax { get; set; }

        [Display(Name = "EMail")]
        public string Email { get; set; }

        [Display(Name = "Principal")]
        public string PrincipalSid { get; set; }

        [Display(Name = "Adjoint")]
        public string AdjointSid { get; set; }

        [Display(Name = "Gestionnaire 1")]
        public string Gestionnaire1Sid { get; set; }

        [Display(Name = "Gestionnaire 2")]
        public string Gestionnaire2Sid { get; set; }

        public Guid TokenId { get; set; }
        [Display(Name = "Type de restauration")]
        public int RestaurationType_Id { get; set; }

    }
}