using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Messagerie.Models;

namespace Messagerie.Repositories.Messagerie {
	public class MessagerieRepositoryEnMemoire : MessagerieRepositoryBase {
		private static Dictionary<string, List<Message>> Messageries = new Dictionary<string, List<Message>>();
		public override IList<Message> AjouterUtilisateur(string nomUtilisateur) {
			nomUtilisateur = nomUtilisateur.ToUpper();
			lock (MessagerieRepositoryEnMemoire.Messageries) {
				List<Message> messages;
				if (!MessagerieRepositoryEnMemoire.Messageries.TryGetValue(nomUtilisateur, out messages)) {
					messages = new List<Message>() {
						new Message() {
							Expediteur = "SYSTEM", Corps = "Bienvenue sur la messagerie"
						}
					};
				}
				return messages.ToList();
			}
		}

		public override void Envoyer(string destinataire, Message message) {
			List<Message> messages;
			lock (MessagerieRepositoryEnMemoire.Messageries) {
				messages = MessagerieRepositoryEnMemoire.Messageries[destinataire.ToUpper()];
			}
			lock (messages) {
				messages.Insert(0, message);
			}
		}

		public override IList<Message> ListerMessages(string nomUtilisateur) {
			List<Message> messages;
			lock(MessagerieRepositoryEnMemoire.Messageries) {
				MessagerieRepositoryEnMemoire.Messageries.TryGetValue(nomUtilisateur.ToUpper(), out messages);
			}
			lock (messages) {
				return messages.ToList();
			}
		}

		public override IEnumerable<string> ListerUtilisateurs() {
			lock (MessagerieRepositoryEnMemoire.Messageries) {
				return MessagerieRepositoryEnMemoire.Messageries.Keys.ToList();
			}
		}
	}
}