package employe;

import java.util.*;

public class Employe {

  private String nom;
  /** entreprise dans laquelle travaille l'employé */
  private Entreprise entreprise;

  public Employe(String nom) {
    this.nom = nom;
  }

  public String getNom() {
    return nom;
  }

  public void setEntreprise(Entreprise entreprise) {
    // Si on veut éviter les appels directs de cette méthode
    // (normalement appelée seulement par Entreprise).
    // On vérifie que la nouvelle entreprise contient bien déjà l'employé
    // et que l'ancienne entreprise ne contient plus l'employé.
    if ((entreprise != null) && (! entreprise.aPourEmploye(this))
	|| (this.entreprise != null) && (this.entreprise.aPourEmploye(this))) {
      throw new UnsupportedOperationException("setEntreprise ne peut être appelée directement");
    }
    this.entreprise = entreprise;
  }

  public Entreprise getEntreprise() {
    return entreprise;
  }

  /**
   * L'employé démissionne (sans aller dans une autre entreprise).
   */
  public void demissionne() throws EmployeException {
    if (entreprise == null) {
      throw new EmployeException(this.getNom() + " déjà au chomage");
    }
    entreprise.seSeparerDe(this);
  }

  public String toString() {
    String desc = "[" + this.getClass() + ":" + nom + ";";
    if (entreprise != null) {
      desc += entreprise.getNom();
    }
    else {
      desc += "au chomage";
    }
    return desc;
  }
}
