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

namespace WebApplication1.Controllers {

	public class MessagerieController : Controller {

		public ActionResult Index() {
			if( Messagerie.UtilisateurCourant == null ) {
				return View( "Login" );
			}
			lock(Messagerie.Messageries) {
				ViewBag.Utilisateurs = Messagerie.Messageries.Keys.ToList(); // L'index affiche les utilisateurs
				ViewBag.UtilisateurCourant = Messagerie.UtilisateurCourant;
				return View("Index");
			}
		}

		[HttpPost]
		public ActionResult Loguer( string pseudo ) {
			lock ( Messagerie.Messageries ) {
				if( Messagerie.Messageries.ContainsKey( pseudo ) ) {
					return View( "Login", "Ce pseudo est déjà utilisé" );
				}
				Messagerie.UtilisateurCourant = pseudo;
				Messagerie.Messageries.Add( pseudo, new List<Message>() { new Message( "SYSTÈME", "Bienvenue sur la messagerie" ) } );
				ViewBag.Message = "Votre pseudo a été accepté";
				return Index();
			}
		}

		public ActionResult Consulter() {
			var utilisateur = Messagerie.UtilisateurCourant;
			if( utilisateur == null )
				return RedirectToAction( "Index" ); // Retour à la case login
			lock( Messagerie.Messageries ) {
				return View( "Consulter", Messagerie.Messageries[Messagerie.UtilisateurCourant].ToList() ); // La vue Consulter affiche tous les messages de l'utilisateur courant
			}
		}

		public ActionResult Ecrire(string destinataire) {
			var utilisateur = Messagerie.UtilisateurCourant;
			if( utilisateur == null )
				return RedirectToAction( "Index" ); // Retour à la case login
			ViewBag.Destinataire = destinataire;
			return View();
		}

		[HttpPost]
		public ActionResult Envoyer( string destinataire, string message ) {
			var utilisateur = Messagerie.UtilisateurCourant;
			if( utilisateur == null )
				return RedirectToAction( "Index" ); // Retour à la case login
			lock( Messagerie.Messageries ) {
				var boite = Messagerie.Messageries[destinataire];
				if( boite != null ) {
					Messagerie.Messageries[destinataire].Add( new Message( utilisateur, message ) );
					ViewBag.CompteRendu = "Message envoyé";
				}
				else
					ViewBag.CompteRendu = "L'utilisateur s'est déconnecté, le message est perdu.";
				return Consulter();
			}
		}
	}
}