package modele;
/**
 * Cette classe propriete herite de la classe possessionPossible
 * @author Emilie Collasse, Cynthia Fong, Salma Zaghloul
 * @version 1.0
 */
public class propriete extends possessionPossible{
	protected String color;
	protected int loyerSansConst;
	protected int loyer1Maison;
	protected int loyer2Maisons;
	protected int loyer3Maisons;
	protected int loyer4Maisons;
	protected int loyerHotel;
	protected int prixUneConstruction;
	protected int nbDeConstruction;
	protected boolean possedeConstruction;
	/**
	 * initialise les attributs
	 * @param nom nom de la rue
	 * @param color 
	 * @param prixTerrainNu prix d'achat
	 * @param sansConst prix du loyer sans construction
	 * @param m1 loyer avec 1 maison
	 * @param m2 loyer avec 2 maisons
	 * @param m3 loyer avec 3 maisons
	 * @param m4 loyer avec 4 maisons
	 * @param ho loyer avec un hotel
	 * @param prix1Const prix pour ajouter une construction
	 */
	public propriete (String nom,String color,int prixTerrainNu,int sansConst,int m1,int m2,int m3,int m4,int ho,int prix1Const){
		super(nom, prixTerrainNu);
		this.color=color;
		loyerSansConst=sansConst;
		estHypothequee=false;
		loyer1Maison=m1;
		loyer2Maisons=m2;
		loyer3Maisons=m3;
		loyer4Maisons=m4;
		loyerHotel=ho;
		possedeConstruction=false;
		nbDeConstruction=0;
		prixUneConstruction=prix1Const;
	}
	/**
	 * 
	 * @return renvoit si la rue possède au moins une construction
	 */
	public boolean getPossedeConstruction(){
		return possedeConstruction;
	}
	/**
	 * 
	 * @return la couleur de la propriete
	 */
	public String getColor(){
		return color;
	}
	/**
	 * 
	 * @return renvoit le nombre de construction. Renvoit 5 si il y a un hotel
	 */
	public int getNbDeConstruction(){
		return nbDeConstruction;
	}
	/**
	 * 
	 * @return le prix pour ajouter une construction 
	 */
	public int getPrixUneConst(){
		return prixUneConstruction;
	}
	/**
	 * modifie le nombre de construction
	 * @param difference
	 */
	public void setNbDeConstruction(int difference){
		nbDeConstruction=nbDeConstruction+difference;
	}
	/**
	 * renvoit la valeur du loyer en fonction du nombre de constructions, du propriétaire, et de l'hypothèque
	 */
	public int calculLoyer(){
		if (estHypothequee)
			return 0;
		else {
			switch(nbDeConstruction){
				case 0:
					boolean possedeHypotheque=false;
					groupeProprietes groupe=plateau.getGroupe(color);
					for (int i=0;i<groupe.getGroupe().size();i++){
						if (groupe.getGroupe().get(i).getEstHypothequee())
							possedeHypotheque=true;
					}
					if (groupe.possedeGroupeEntier(proprietaire)&&!possedeHypotheque)
						return (loyerSansConst*2);
					else 
						return loyerSansConst;
				case 1:
					return loyer1Maison;
				case 2:
					return loyer2Maisons;
				case 3:
					return loyer3Maisons;
				case 4:
					return loyer4Maisons;
				case 5:
					return loyerHotel;
			}
		}
		System.out.println("Erreur calculLoyer");
		return -1;
	}
	/**
	 * @param joueur joueur situé sur la case
	 * @return Si le joueur arrive sur une case sans proprietaire, une phrase qui lui permet d'acheter la propriete; Si le joueur arrive sur la propriete d'un autre joueur, alors ca returne le prix a payer et si c'est la sienne , ca renvoie que cette propriete lui appartient.
	 */
	public String actionnerCase(joueur Joueur){
		if (proprietaire==null)
			return "Vous êtes sur la case "+nom+" de couleur "+color+". Vous pouvez acheter cette case au prix de "+prixDepart+"€./achatPossible";
		else 
			if(!Joueur.getNom().equals(proprietaire.getNom()))
					return "Vous êtes sur la case "+nom+". Cette case appartient à "+proprietaire.getNom()+". Vous devez payer un loyer de "+calculLoyer()+"€./payerLoyer-"+calculLoyer();
			else
				return "Vous êtes sur la case "+nom+" dont vous êtes le propriétaire./NothingToDo";
	}
	/**
	 * même fonction que actionnerCase(joueur Joueur) mais était nécessaire pour l'ihm 
	 */
	public String actionnerCaseIHM(joueur Joueur){
		if (proprietaire==null)
			return "Vous êtes sur la case "+nom+" de couleur "+color+". Vous pouvez acheter cette case au prix de "+prixDepart+"€./achatPossible";
		else 
			if(!Joueur.getNom().equals(proprietaire.getNom()))
					return "Vous êtes sur la case "+nom+". Cette case appartient à "+proprietaire.getNom()+". Vous devez payer un loyer de "+calculLoyer()+"€./payerLoyer-"+calculLoyer();
			else
				return "Vous êtes sur la case "+nom+" dont vous êtes le propriétaire./NothingToDo";
	}
}
