public class Livre {
  // Variables
  private String titre, auteur;
  private int nbPages;
  private double prix;
  private boolean prixFixe = false;
  // Le même comptable pour tous les livres (static).
  // Utilisé dans setPrix.
  private static Comptable comptable = new Comptable();


  // Constructeurs
  public Livre(String unAuteur, String unTitre) {
    this.auteur = unAuteur;
    this.titre = unTitre;
  }

  public Livre(String unAuteur, String unTitre, int nbPages) {
    this(unAuteur, unTitre);
    this.setNbPages(nbPages);
  }

  public Livre(String unAuteur, String unTitre, int nbPages, double prix) {
    this(unAuteur, unTitre, nbPages);
    this.setPrix(prix);
  }
  
  public String getAuteur() {
    return auteur;
  }

  public String getTitre() {
    return titre;
  }

  public int getNbPages() {
    return nbPages;
  }

  public double getPrix() {
    return prix;
  }

  public void setAuteur(String unAuteur) {
    auteur = unAuteur;
  }

  public void setTitre(String unTitre) {
    titre = unTitre;
  }

  public void setNbPages(int n) {
    if (n > 0) {
      nbPages = n;
    }
    else {
      System.err.println("Erreur : nombre de pages négatif !");
    }
  }

  public void setPrix(double unPrix) {
    if (prixFixe) {
      System.err.println("Prix déjà fixé !");
    }
    else if (unPrix >= 0.0) {
      prix = unPrix;
      prixFixe = true;
      comptable.comptabiliser(this);
    }
    else {
      System.err.println("Erreur : prix négatif !");
    }
  }

  public static double getTotalPrix() {
    return comptable.getTotalPrix();
  }

  public void afficheToi() {
    System.out.print(toString());
  }

  public String toString() {
    return
      "Livre [titre=" + titre + ",auteur=" + auteur + ",nbPages=" 
      + nbPages + "prixFixe=" + prixFixe + ",prix=" + prix + "]";
  }

  public int compare(Livre l) {
    // On a accès aux variables des autres livres
    // (protection d'accès par classe et pas par objet en Java)
    if (nbPages == l.nbPages) {
      return 0;
    }
    else if (nbPages > l.nbPages) {
      return +1;
    }
    else {
      return -1;
    }
  }

  public static int compare2(Livre l1, Livre l2) {
    // On a accès aux variables des autres livres
    // (protection d'accès par classe et pas par objet en Java)
    if (l1.nbPages == l2.nbPages) {
      return 0;
    }
    else if (l1.nbPages > l2.nbPages) {
      return +1;
    }
    else {
      return -1;
    }
  }
}
