package src.Controller;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.Serializable;
/**
* <p>
* Classe representant les messages envoyés en TCP lors d'une session de clavardage
* </p>
*/
public class MessageHorodate implements Serializable {
	private Utilisateur destinataire ;
	private Utilisateur source ;
	private Date dateHorodatage ;
	private int type; // 0 = debut de la communication, 1= message de communication, 2 = fin de la communicataion 
	private String Message;
	
	/**
	* <p>
	* Constructeur , le message va etre horodate 
	* @param destinataire - Destinataire du message
	* @param source - Source du message
	* @param Message - Message envoye
	* </p>
	*/
	public MessageHorodate(Utilisateur destinataire, Utilisateur source, String Message, int type) {
		this.setDestinataire(destinataire) ;
		this.setSource(source) ;
		this.setMessage(Message) ;
		this.setDateHorodatage(new Date());
		this.type = type;
	}
	
	public void setDate(Date d) {
		this.setDateHorodatage(d);
	}
	
	/**
	* <p>
	* permet de creer une representation string du message
	* @return Les differents attributs de la classe sous forme de string
	* </p>
	*/
	@Override
	public String toString() {
		String Msg = "";
		Msg += ("Destinataire::" + this.getDestinataire() + "\n") ;
		Msg += ("Source::" + this.getSource()+ "\n") ;
		Msg += ("Type::"+ this.type+ "\n");
		Msg += ("Date::" + this.dateToString() + "\n") ;
		Msg += ("Message::" + this.getMessage() + "\n" );
		return Msg ;
	}
	
	/**
	* <p>
	* permet de creer une representation string de la date d'horodatage
	* @return La date d'horodatage du message en format yyyy/MM/dd HH:mm:ss
	* </p>
	*/
	public String dateToString() {
		DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		return format.format(this.getDateHorodatage());
	}
	
	
	/**
	* <p>
	* Permet de re creer un message horodate a partir d'un string 
	* @return un messageHorodate
	* </p>
	*/
	  public static MessageHorodate stringToMessageHorodate(String s) {
		
		String mots[] = s.split("\n");
		Utilisateur destinataire = Utilisateur.stringToUtilisateur(mots[0].split("::")[1]);
		Utilisateur source = Utilisateur.stringToUtilisateur(mots[1].split("::")[1]);
		int type = Integer.parseInt(mots[2].split("::")[1]);
		DateFormat format = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		Date date = new Date();
		/*try {
			date = format.parse(mots[3].split("::")[1]);
		} catch (Exception e) {
			e.printStackTrace();
		}*/
		String payload = "";
		for(int i=4; i< mots.length; i++) {
			if(mots[i].startsWith("Message::")) {
				mots[i]=mots[i].split("::")[1];
			}
			payload += mots[i]+"\n";
		}
		
		MessageHorodate mh = new MessageHorodate(destinataire, source, payload, type);
		//mh.setDate(date);
	
		return mh ;
	}

	public Utilisateur getSource() {
		return source;
	}

	public void setSource(Utilisateur source) {
		this.source = source;
	}

	public Utilisateur getDestinataire() {
		return destinataire;
	}

	public void setDestinataire(Utilisateur destinataire) {
		this.destinataire = destinataire;
	}

	public String getMessage() {
		return Message;
	}

	public void setMessage(String message) {
		Message = message;
	}
	
	public int getType() {
		return type;
	}

	public void setType(int Type) {
		this.type = type;
	}

	public Date getDateHorodatage() {
		return dateHorodatage;
	}

	public void setDateHorodatage(Date dateHorodatage) {
		this.dateHorodatage = dateHorodatage;
	}

}
