package tracker;
import java.util.LinkedList;
//Ez az osztály a feladatok tárolását teszi lehetové.
//Egy feladatnál nyilvántartjuk annak szöveges leírását és azt, hogy hanyadik feladatcsoportba (milestone) tartozik.
public class Issue{
	//Három adattagja van: a description, amely egy szöveg, a labels, amely Label objektumok gyujteménye,
	String description;
	//és egy feladat-csoportot jelzo milestone. Ez utóbbi egy egész szám.
	int milestone;
	//Egy feladathoz tetszoleges számú címkét rendelhetünk.
	LinkedList<Label> labels;
	//Mindegyik adattaghoz készítsünk lekérdezo muveletet; a címkéket láncolt listában adjuk vissza. (1 pont)
	public LinkedList<Label> getLabels(){
		return labels;
	}
	public String getDescription(){
		return description;
	}
	public int getMilestone(){
		return milestone;
	}
	//Az osztály konstruktora egyszeruen kapja meg a feladat leírását,
	//a címkéket (címkék tömbjeként) és a feladat-csoport azonosítóját, és tárolja ezeket el. (1 pont)
	public Issue(String d, Label[] ls, int i){
		description=d;
		milestone=i;
		labels=new LinkedList<Label>();
		for(Label l:ls){
			labels.add(l);
		}
	}

	//Issue objektumot lehessen létrehozni egy statikus createIssue metódussal is.
	//A metódus a feladat adatait egyetlen szövegként kapja meg, a következo formában:
	//description@label1,label2,label3:milestone (itt a milestone egy szám).
	public static Issue createIssue(String str){
		//Scanner s = new Scanner(str);
		String a;
		Label[] b=new Label[0];
		int c=0;
		
		String cs;
		
		String[] ss, x, ls;
		if(str.contains("@")){
			if(!str.contains(":")){return null;}
			ss=str.split("@");
			if(ss.length>2){return null;}
			a = ss[0];
			if(a.contains(":")){return null;}
			x = ss[1].split(":");
			if(x.length<2){return null;}
			//System.out.println(x.length);
			//for(String s:x){System.out.println(s);}
			if(x.length>2){return null;}
			//if(!x[0].contains(",")){return null;}
			ls=x[0].split(",");
			cs = x[1];
			b=new Label[ls.length];
			int i=0;
			for(String n : ls){
				b[i]=new Label(n);
				i++;
			}
		}else{//Ha nincsenek címkék, akkor a @ elmarad: description:milestone
			if(!str.contains(":")){return null;}
			ss=str.split(":");
			if(ss.length>2){return null;}
			a = ss[0];
			cs = ss[1];
		}
		try{
			c=Integer.parseInt(cs);
		} catch(Exception ex){
			return null;
		}
		return new Issue(a, b, c);
	}
	//Ha a metódus rossz formátumú adatot kap, akkor adjon vissza null-t. (2 pont)
	//Legyen az osztálynak egy hasLabel függvénye, amely megkapja szövegesen egy label nevét,
	//és visszatér azzal, hogy a feladat a kategóriába tartozik-e vagy sem
	//(a feladat tartalmazza-e ezt a szövegu címkét). (1 pont)
	public boolean hasLabel(String s){
		for(Label l : labels){
			if(l.getName().equals(s)){
				return true;
			}
		}
		return false;
	}
}