/**
*Programme cree par The Clusters
*Classe Carte du jeu "Chkoba"
*@author The Clusters
*@version 1.0
**/

package chkoba;

import chkoba.*;
import java.lang.Comparable.*;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

/**
*	Classe CarteImpl
*/

public class CarteImpl extends UnicastRemoteObject implements ICarte
{	
	//Attributs
	/** Represente la couleur de la carte */
	private Couleur couleurC;
	/** Represente la valeur de la carte */
	private int valeur;
	/** Represente le nom de la carte */
	private String nom;
	
	/**
	* CONSTRUCTEURS
	*/
	
	/**
	*Constructeur par defaut<br/>
	*Construit une carte avec comme attributs : la valeur a 0, la couleur null et le nom a "vide"
	*/
	public CarteImpl() throws RemoteException
	{
		valeur=0;
		couleurC=null;
		nom="vide";
	}
	
	/**
	*Constructeur avec deux parametres
	*@param n , entier representant la valeur
	*@param c , la couleur de la carte 
	*/
	public CarteImpl(int n, Couleur c) throws RemoteException
	{
		valeur=n;
		couleurC=c;
		nom=Integer.toString(n);
	}
	
	/**
	*Constructeur avec trois parametres
	*@param n , entier representant la valeur
	*@param c , la couleur de la carte 
	*@param s , le nom de la carte ( dame, roi, valet )
	*/
	public CarteImpl(int n, Couleur c, String s) throws RemoteException
	{
		valeur=n;
		couleurC=c;
		nom=s;
	}
	
	/**
	* METHODES
	*/
	
	/**
	*Methode qui permet de comparer deux cartes
	*@param o , objet qui sera compare
	*/
	public int compareTo(Object o) throws RemoteException
	{
		if (o instanceof ICarte)
		{
			try
			{
				ICarte c = (ICarte)o;
				int valeurCarteThis = this.getValeur();
				Couleur CouleurCarteThis = this.getCoul();
				int valeurCarteJ = c.getValeur();
				Couleur CouleurCarteJ =c.getCoul();
				if ( (valeurCarteThis != valeurCarteJ) || (""+CouleurCarteThis).compareTo(""+CouleurCarteJ)!=0)
					return 0;
				else return 1;
			}
			catch(Exception e)
			{
				return -1;
			}
			
		}
		else return -2;
	}
	
	/**
	*Methode qui permet de comparer deux cartes<br/>
	*A la difference de la precedente, celle ci affiche
	*la difference entre les deux valeurs des cartes
	*@param o , objet qui sera compare
	*/
	public int compare(Object o) throws RemoteException
	{
		if ( !( o instanceof ICarte ))
			
			System.exit(0);
		
		ICarte c=(ICarte) o;
			
		
		return this.valeur-c.getValeur();
	}
	
	//Accesseurs
	/** Retourne la couleur de la carte */
	public Couleur getCoul() throws RemoteException { return couleurC; }
	
	/** Retourne la valeur de la carte */
	public int getValeur() throws RemoteException { return valeur; }
	
	/** Retourne le nom de la carte */
	public String getNom() throws RemoteException { return nom; };
	
	/** Modifie la valeur de la carte */
	public void setValeur(int num) throws RemoteException { valeur=num;};
	
	//Affichage
	/** Affiche les attributs de la classe */
	public String affiche() throws RemoteException
	{
		String s="";
		
		s+=nom+" de "+couleurC+"\n";
		
		return s;
	}
}
