using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WebApplication1.Models;

namespace WebApplication1.Controllers {
	public class ExerciceRechercheDePersonnesController : Controller {
		public ActionResult Index() {
			ViewBag.Titres = AnnuaireEntities.TitresEnCache.Values;
			return View( "Index" );
		}
		[HttpPost, ActionName( "Index" )]
		public ActionResult Rechercher( short? titreId, string nom, string prenom, string telephone ) {
			nom = nom.Trim();
			prenom = prenom.Trim();
			telephone = telephone.Trim();
			const string yarien = "///";
			string recherche = $"{titreId}/{nom}/{prenom}/{telephone}";
			if( recherche == yarien ) {
				ModelState.AddModelError( string.Empty, "Filtrez un mimimum, quand même !" );
				return Index();
			}
			List<Personne> resultats = (List<Personne>)HttpContext.Cache[recherche];
			if( resultats == null ) {
				using( var dc = new AnnuaireEntities() ) {
					IQueryable<Personne> rq = dc.Personnes.Include( "Titre" ).AsNoTracking();
					if( titreId.HasValue )
						rq = rq.Where( p => p.TitreId == titreId.Value );
					if( !string.IsNullOrWhiteSpace( prenom ) )
						rq = rq.Where( p => p.Prenom.Contains( prenom ) );
					if( !string.IsNullOrWhiteSpace( nom ) )
						rq = rq.Where( p => p.Nom.Contains( nom ) );
					if( !string.IsNullOrWhiteSpace( telephone ) )
						rq = rq.Where( p => p.Telephone.Contains( telephone ) );
					resultats = rq.ToList();
					HttpContext.Cache.Add( recherche, resultats, null, DateTime.Now.AddSeconds( 30 ), System.Web.Caching.Cache.NoSlidingExpiration, System.Web.Caching.CacheItemPriority.Default, null );
				}
			}
			else {
				ViewBag.Message = "Les données étaient présentes en cache !";
			}
			ViewBag.Resultats = resultats;
			return Index();
		}
	}
}