/** @author BEDTACI / A32BO2 
 * Tárgy:	Programozási nyelvek II. Java (BSc)
 * Oktató:	Németh Boldizsár
 * Feladat:	Elso ZH - Könyvtár
 * Határido:	2015-11-06, 20:00:00
 * Hátralévo ido:	01:21:36
*/

package konyvtar;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.io.*;//File, FileReader, BufferedReader, IOException

/** Valósítsuk meg a konyvtar.Konyvtar osztályt.
 */
public class Konyvtar{
	private String nev; //A könyvtárnak legyen egy nev adattagja (szöveg) és 
	private Konyv[] konyvek; //tartozzanak bele konyvek (Konyvek nem növekvo méretu tömbje).

	/** A konstruktora egy fájlnevet kap szövegesen paraméterként.
	 * Feltételezheto, hogy a fájl létezik
	 * (ha mégsem létezne, a konstruktor engedje ki a keletkezo kivételt),
	 * és helyesen van kitöltve: az elso sorában tartalmazza a könyvtár nevét,
	 * a másodikban a benne található könyvek számát,
	 * a fennmaradó sorokban pedig egy-egy könyv adatait.
	 *
	 * A könyvek adatai olyan alakúak,
	 * ahogyan azt a Konyv második konstruktora elvárja.
	 * A Konyvtar konstruktora olvassa be a fájl adatait,
	 * és töltse fel az adattagokat.
	 */
	public Konyvtar(String file) throws IOException{
		BufferedReader r = new BufferedReader(new FileReader(file));
		nev=r.readLine();
		int i=0;
		int n=Integer.parseInt(r.readLine());
		konyvek=new Konyv[n];
		for (String line = r.readLine(); line != null; line = r.readLine()) {
			konyvek[i]=new Konyv(line);
			i++;
		}
	}

	/** A toString muveletnek itt is legyen saját megvalósítása.
	 * A példaként adott konyvtar1.txt fájlban leírt könyvtár
	 * "Konyvtar:(Kvt1, Konyv[Nev1, [katA, katB, katC, katD]],
	 * Konyv[Nev2, [katA, katE]], Konyv[Nev3, [katB, katC, katF]])"
	 * kimenetet adjon.
	 */
	@Override
	public String toString(){
		String ret="Konyvtar:("+nev+", ";
		for(int i=0;i<konyvek.length-1;i++){
			ret+=konyvek[i]+", ";
		}
		ret+=konyvek[konyvek.length-1] + ")";
		//System.out.println("HAVE "+ret);
		//System.out.println("WANT Konyvtar:(Kvt1, Konyv[Nev1, [katA, katB, katC, katD]], Konyv[Nev2, [katA, katE]], Konyv[Nev3, [katB, katC, katF]])");
		return ret;
	}

	/** Legyen egy getKategoriaKonyvei muvelete.
	 * Ez szövegesen megkapja egy kategória nevét,
	 * és azokat a könyveket adja vissza egy List listában,
	 * amelyek ebbe a kategóriába tartoznak.
	 */
	public List<Konyv> getKategoriaKonyvei(String k){
		ArrayList<Konyv> ret=new ArrayList<>();
		for(Konyv b : konyvek){
			if(b.hasKategoria(k)){
				ret.add(b);
			}
		}
		return ret;
	}
}