package de.stoermer.xxx.domain.aufgaben;

import java.util.List;
import java.util.Random;

import de.stoermer.xxx.domain.Spieler;
import de.stoermer.xxx.domain.Toy;
import de.stoermer.xxx.domain.Werkzeug;
import de.stoermer.xxx.domain.xml.Sperre;

public class LockSchablone extends Schablone  {

	private static final int INTERVAL_STD = 15;
	private String text;
	private String releaseText;
	private Werkzeug werkzeug;
	private Integer minutenVon;
	private Integer minutenBis;
	
	public LockSchablone(List<Toy> benoetigteToys) {
		super(benoetigteToys);
	}
	
	public Werkzeug getWerkzeug() {
		return werkzeug;
	}
	
	public Lock neuesLock(Spieler weggesperrterSpieler, Spieler keyholder) {
		return new Lock(weggesperrterSpieler, keyholder, text, getInterval(minutenVon, minutenBis), werkzeug, releaseText);
	}

	private int getInterval(Integer minutenVon, Integer minutenBis) {
		if (minutenVon == null) {
			return INTERVAL_STD;
		} else if (minutenBis == null) {
			return minutenVon;
		} else {
			return new Random().nextInt(minutenVon, minutenBis);
		}
	}
	
	public static LockSchablone fromXml(Sperre xml, List<de.stoermer.xxx.domain.xml.Toy> alle) {
		List<Toy> benoetigt = getBenoetigteToys(alle, xml.getBenoetigteToyIds());	
		LockSchablone schablone = new LockSchablone(benoetigt);
		schablone.text = xml.getText();
		schablone.releaseText = xml.getReleaseText();
		
		schablone.minutenVon = xml.getMinutenVon();
		schablone.minutenBis = xml.getMinutenBis();
		schablone.werkzeug = Werkzeug.valueOf(xml.getVerschluss());
		
		return schablone;
	}
}
