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

namespace AppliWebANA.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<Models.Message>() {
						new Message() {
							Expediteur = "SYSTÈME",
							Corps = "Bienvenue sur la messagerie"
						}
					};
					MessagerieRepositoryEnMemoire.Messageries.Add( nomUtilisateur, messages );
				}
				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 ) {
				messages = MessagerieRepositoryEnMemoire.Messageries[nomUtilisateur.ToUpper()];
			}
			lock( messages ) {
				return messages.ToList();
			}
		}

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