package Bibliothèque;

import java.util.Arrays;
import java.util.Collection;
import java.util.Vector;

import javax.swing.event.ListSelectionEvent;

public class Livre {
	private String titre;
	private int année;
	private long référence;
	private Vector<Auteur> mesAuteurs;
	private Vector<Chapitre> mesChapitres;
	
	
	
	
	public Livre(String titre, int année, long référence) {
		super();
		this.titre = titre;
		this.année = année;
		this.référence = référence;
		this.mesAuteurs = new Vector<Auteur>();
		this.mesChapitres = new Vector<Chapitre>();
	}
	
	public Livre(String titre, int année, long référence, Auteur...auteurs) {
		super();
		this.titre = titre;
		this.année = année;
		this.référence = référence;
		this.mesAuteurs = new Vector<Auteur>();
		this.mesChapitres = new Vector<Chapitre>();
		this.mesAuteurs.addAll(Arrays.asList(auteurs));
	}
	
	public boolean ajouterChapitre(String titre, String resume,String texte)
	{
		Chapitre c = new Chapitre(titre,resume,texte);
		if(!chapitrePresent(c))
		{
			this.mesChapitres.add(c);
			return true;
		}
		return false;
	}
	
	public boolean supprimerChapitre(Chapitre c)
	{
		if(chapitrePresent(c))
		{
			this.mesChapitres.remove(c);
			return true;
		}
		return false;
	}
	
	public boolean supprimerChapitre(String titre, String resume,String texte)
	{
		Chapitre c = new Chapitre(titre,resume,texte);
		if(chapitrePresent(c))
		{
			this.mesChapitres.remove(c);
			return true;
		}
		return false;
	}
	
	private boolean chapitrePresent(Chapitre c) {
		for(Chapitre current : mesChapitres)
		{
			if(c.equals(current))
			{	
				return true;
			}
		}
		return false;
	}
	
	public boolean ajouterAuteur(Auteur a)
	{
		if(!auteurPresent(a))
		{
			this.mesAuteurs.add(a);
			return true;
		}
		return false;
	}
	
	public boolean supprimerAuteur(Auteur a)
	{
		if(auteurPresent(a))
		{
			this.mesAuteurs.remove(a);
			return true;
		}
		return false;
	}
	
	private boolean auteurPresent(Auteur a) {
		for(Auteur current : mesAuteurs)
		{
			if(a.equals(current))
			{	
				return true;
			}
		}
		return false;
	}

	public Vector<Auteur> getMesAuteurs() {
		return mesAuteurs;
	}
	public Vector<Chapitre> getMesChapitres() {
		return mesChapitres;
	}
	public String getTitre() {
		return titre;
	}
	public void setTitre(String titre) {
		this.titre = titre;
	}
	public int getAnnée() {
		return année;
	}
	public void setAnnée(int année) {
		this.année = année;
	}
	public long getRéférence() {
		return référence;
	}
	public void setRéférence(long référence) {
		this.référence = référence;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + année;
		result = prime * result + (int) (référence ^ (référence >>> 32));
		result = prime * result + ((titre == null) ? 0 : titre.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Livre other = (Livre) obj;
		if (année != other.année)
			return false;
		if (référence != other.référence)
			return false;
		if (titre == null) {
			if (other.titre != null)
				return false;
		} else if (!titre.equals(other.titre))
			return false;
		return true;
	}

	
	
	
	
}
