using CD67.FicheCollege.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;

namespace CD67.FicheCollege.Factory
{
    public partial class ActionEduThematiqueFactory : Internal.BaseFactory<Entity.ActionEduThematique>
    {
        public override IQueryable<Entity.ActionEduThematique> getAll()
        {
            return base.getAll("Ordre");
        }

        public void Up(ref Entity.ActionEduThematique item)
        {
            int ordre = item.Ordre;

            //Cas de sortie immédiate
            if (item.Ordre == 1) return;

            Entity.ActionEduThematique itemToSubstitute = dbContext.ActionEduThematiques.Where(i => i.Ordre == ordre - 1).First();
            itemToSubstitute.Ordre += 1;
            item.Ordre -= 1;
            dbContext.SaveChanges();
        }

        public void Down(ref Entity.ActionEduThematique item)
        {
            int ordre = item.Ordre;

            //Cas de sortie immédiate
            if (item.Ordre == dbContext.ActionEduThematiques.Max(i => i.Ordre)) return;

            Entity.ActionEduThematique itemToSubstitute = dbContext.ActionEduThematiques.Where(i => i.Ordre == ordre + 1).First();
            itemToSubstitute.Ordre -= 1;
            item.Ordre += 1;
            dbContext.SaveChanges();
        }

        private void Sort()
        {
            int ordre = 1;
            foreach (Entity.ActionEduThematique statut in dbContext.ActionEduThematiques.OrderBy(i => i.Ordre))
            {
                statut.Ordre = ordre++;
            }
            dbContext.SaveChanges();
        }

        public override void add(ref Entity.ActionEduThematique entity)
        {
            //Initialisation de l'ordre
            if (dbContext.ActionEduThematiques.Count() == 0) entity.Ordre = 1;
            else entity.Ordre = dbContext.ActionEduThematiques.Max(i => i.Ordre) + 1;

            base.add(ref entity);
        }

        public override void delete(ref Entity.ActionEduThematique entity)
        {
            base.delete(ref entity);
            Sort();
        }
    }
}