using DAL;
using EmpForm.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Caching;
using System.Web.Mvc;

namespace EmpForm.Controllers {
	public class AnnuaireController : Controller {

		private AnnuaireEntities _DC = null;
		private AnnuaireEntities DC {
			get {
				if (_DC == null) {
					_DC = new AnnuaireEntities();
					_DC.Configuration.LazyLoadingEnabled = false;
				}
				return _DC;
			}
		}
		public ActionResult Index() {
			ViewBag.Titres = Utilitaires.Titres;
			return View();
		}
		public ActionResult Rechercher(Personne filtre, short? titreId) {
			string key = Request.Url.Query.Replace(" ", string.Empty).ToUpper();
			var result = (IEnumerable<Personne>)HttpContext.Cache[key];
			var requete = DC.Personnes.AsQueryable();
			if (result == null) {
				if (titreId.HasValue)
					requete = requete.Where(p => p.TitreId == titreId.Value);
				if (!string.IsNullOrWhiteSpace(filtre.Nom)) {
					filtre.Nom = filtre.Nom.Trim();
					requete = requete.Where(p => p.Nom.Contains(filtre.Nom));
				}
				if (!string.IsNullOrWhiteSpace(filtre.Prenom)) {
					filtre.Prenom = filtre.Prenom.Trim();
					requete = requete.Where(p => p.Prenom.Contains(filtre.Prenom));
				}
				if (!string.IsNullOrWhiteSpace(filtre.Telephone)) {
					filtre.Telephone = filtre.Telephone.Trim();
					requete = requete.Where(p => p.Telephone.Contains(filtre.Telephone));
				}
				result = requete.ToList();
				HttpContext.Cache.Add(key, result, null, DateTime.Now.AddMinutes(10),
					Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, null);
				ViewBag.Message = "Requete execute";
			} else {
				ViewBag.Message = "Donnee en cache";
			}
			ViewBag.Personnes = result; // Recherche
			ViewBag.Titres = Utilitaires.Titres;
			return View("Index");
		}
		protected override void Dispose(bool disposing) {
			if (_DC != null) {
				_DC.Dispose();
			}
			base.Dispose(disposing);
		}
	}
}