package de.stoermer.xxx.domain.xml;

import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

import javax.xml.bind.JAXBException;

import de.stoermer.xxx.domain.Werkzeug;

public class AufgabenCreator {

	private Toy vibrator = Toy.from("vibr_1", "Vibrator");
	private Toy dildoKlein = Toy.from("dildo_klein", "Dildo klein");
	private Toy dildoMittel= Toy.from("dildo_mittel", "Dildo mittel");
	private Toy dildoGross = Toy.from("dildo_gross", "Dildo groß");
	private Toy plugKlein = Toy.from("plug_klein", "Plug klein");
	private Toy plugGross = Toy.from("plug_gross", "Plug groß");
	private Toy eletroPlug = Toy.from("electro_plug", "Electro Plug");
	private Toy fesseln = Toy.from("fesseln", "Fesseln");
	private Toy augenbinde = Toy.from("augenbinde", "Augenbinde");
	private Toy ballknebel = Toy.from("ball_knebel", "Ballknebel");
	private Toy penisknebel = Toy.from("penis_knebel", "Penisknebel");
	private Toy doppenPenisknebel = Toy.from("doppel_penis_knebel", "Doppel-Penisknebel");
	private Toy pumpPlug = Toy.from("pump_plug", "Pump plug");
	private Toy nippelklemmen = Toy.from("nippelklemmen", "Nippelklemmen");
	private Toy fickmaschine = Toy.from("fickmaschine", "Fickmaschine");
	private Toy penisVibrator = Toy.from("penisvibrator", "Penisvibrator");
	private Toy peitsche = Toy.from("peitsche", "Peitsche");
	private Toy gerte = Toy.from("gerte", "Gerte");
	private Toy paddel = Toy.from("paddel", "Paddel");
	private Toy kgFrau = Toy.from("kg", "Keuschheitsgürtel Frau");
	private Toy kgMann = Toy.from("kg", "Keuschheitsgürtel Mann");
	private Toy peniskaefig = Toy.from("peniskaefig", "Peniskäfig");
	private Toy analVibrator = Toy.from("analvibrator", "Anal-Vibrator");
	private Toy doppelDildo = Toy.from("doppeldildo", "Doppeldildo");
	
	private void init() throws JAXBException, URISyntaxException {
		StandardAufgaben aufgaben = new StandardAufgaben();
		aufgaben.setToys(getToys());
		aufgaben.setBeglueckungen(getBeglueckungen());
		aufgaben.setSperren(getSperren());
		aufgaben.setStrafen(getStrafen());
		
		new XmlAufgabenProvider().safe(aufgaben);
	}
	
	private List<Toy> getToys() {
		List<Toy> toys = new ArrayList<>();
		
		toys.add(vibrator);
		toys.add(dildoKlein);
		toys.add(dildoMittel);
		toys.add(dildoGross);
		toys.add(plugKlein);
		toys.add(plugGross);
		toys.add(eletroPlug);
		toys.add(fesseln);
		toys.add(augenbinde);
		toys.add(ballknebel);
		toys.add(penisknebel);
		toys.add(doppenPenisknebel);
		toys.add(pumpPlug);
		toys.add(nippelklemmen);
		toys.add(fickmaschine);
		toys.add(penisVibrator);
		toys.add(peitsche);
		toys.add(gerte);
		toys.add(paddel);
		toys.add(kgFrau);
		toys.add(kgMann);
		toys.add(peniskaefig);
		toys.add(analVibrator);
		toys.add(doppelDildo);
		
		return toys;
	}

	private List<Strafe> getStrafen() {
		List<Strafe> result = new ArrayList<>();
		result.add(createStrafe(1, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der flachen Hand auf das Gesäß", null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		result.add(createStrafe(3, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 15 beherzte Schläge mit der flachen Hand auf das Gesäß, $SPIELER1 zählt laut mit", null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		result.add(createStrafe(2, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der Gerte auf das Gesäß", null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(gerte)));
		result.add(createStrafe(4, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 15 beherzte Schläge Schläge mit der Gerte auf das Gesäß, $SPIELER1 zählt laut mit", null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(gerte)));
		result.add(createStrafe(2, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 5 Schläge mit dem Paddel auf das Gesäß", null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(paddel)));
		result.add(createStrafe(2, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 15 beherzte Schläge mit dem Paddel auf das Gesäß, $SPIELER1 zählt laut mit", null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(paddel)));
		result.add(createStrafe(3, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der Peitsche auf das Gesäß", null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(peitsche)));
		result.add(createStrafe(5, "$SPIELER1 stellt sich mit dem Gesicht zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 15 beherzte Schläge mit der Peitsche auf das Gesäß, $SPIELER1 zählt laut mit", null, null, Collections.emptyList(), Collections.emptyList(), Arrays.asList(peitsche)));
		
		result.add(createStrafe(5, "$SPIELER1 liegt auf dem Rücken mit breiten Beinen, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der Peitsche auf die Klitoris, $SPIELER1 zählt laut mit", null, null, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(peitsche)));
		result.add(createStrafe(5, "$SPIELER1 liegt auf dem Rücken mit breiten Beinen, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der Paddel auf die Klitoris, $SPIELER1 zählt laut mit", null, null, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(paddel)));
		result.add(createStrafe(5, "$SPIELER1 liegt auf dem Rücken mit breiten Beinen, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der Gerte auf die Klitoris, $SPIELER1 zählt laut mit", null, null, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(gerte)));
		result.add(createStrafe(4, "$SPIELER1 liegt auf dem Rücken mit breiten Beinen, $SPIELER2 verpasst $SPIELER1 5 Schläge mit der Hand auf die Klitoris, $SPIELER1 zählt laut mit", null, null, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(peitsche)));
		
		result.add(createStrafe(5, "$SPIELER1 stellt sich mit dem Rücken zur Wand, Hände hinterm Kopf, Beine schulterbreit, $SPIELER2 verpasst $SPIELER1 5 Ohrfeigen, $SPIELER1 zählt laut mit", null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		
		result.add(createStrafe(5, "$SPIELER2 führt $SPIELER1 anal einen Elektro-Plug ein. $SPIELER2 erhöht ganz langsam die Intensität bis $SPIELER1 'STOP' sagt, dann fängt $SPIELER2 wieder bei null an", 30, 90, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(eletroPlug)));
		result.add(createStrafe(4, "$SPIELER2 führt $SPIELER1 anal einen Pump-Plug ein. $SPIELER2 pumpt ganz langsam auf bis $SPIELER1 'STOP' sagt, dann fängt $SPIELER2 wieder bei null an", 30, 90, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(pumpPlug)));
		result.add(createStrafe(4, "$SPIELER2 führt $SPIELER1 vaginal einen Elektro-Plug ein. $SPIELER2 erhöht ganz langsam die Intensität bis $SPIELER1 'STOP' sagt, dann fängt $SPIELER2 wieder bei null an", 30, 90, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(eletroPlug)));
		result.add(createStrafe(5, "$SPIELER1 liegt auf dem Rücken, $SPIELER2 legt $SPIELER1 einen Doppel-Penisknebel an und reitet diesen vaginal oder anal", 60, 120, Arrays.asList(Werkzeug.MUND), Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(penisknebel)));
		result.add(createStrafe(4, "$SPIELER1 liegt mit auf den Rücken gefesselten Händen auf dem Rücken, $SPIELER2 setzt sich auf das Gesicht von $SPIELER1 und lässt sich den Vaginal und/oder Analbereich verwöhnen", 90, 180, Collections.emptyList(), Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(fesseln)));
		result.add(createStrafe(3, "$SPIELER2 legt $SPIELER1 Nippelklemmen an, $SPIELER2 zieht an der Kette und erhöht ganz langsam die Intensität bis $SPIELER1 'STOP' sagt, dann fängt $SPIELER2 wieder bei null an", 30, 90, Collections.emptyList(), Collections.emptyList(), Arrays.asList(nippelklemmen)));
		result.add(createStrafe(5, "$SPIELER2 fesselt, knebelt und verbindet die Augen von $SPIELER1. $SPIELER2 lässt $SPIELER1 wehrlos liegen, bei Ablauf der Zeit erlöst $SPIELER2 $SPIELER1 mit einem beherzten Plapps auf den Po", 120, 180, Collections.emptyList(), Collections.emptyList(), Arrays.asList(fesseln, ballknebel, augenbinde)));
		result.add(createStrafe(4, "$SPIELER2 fesselt und knebelt $SPIELER1. $SPIELER1 trägt dabei einen Umschnalldildo. $SPIELER2 reitet den Umschnalldildo von $SPIELER1", 60, 180, Arrays.asList(Werkzeug.UMSCHNALLDILDO), Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(fesseln, ballknebel)));
		result.add(createStrafe(5, "$SPIELER2 fesselt und knebelt $SPIELER1. $SPIELER1 trägt dabei einen Umschnalldildo, KG und einen großen Buttplug. $SPIELER2 gibt dem Umschnalldildo einen Blowjow in 69er Positition und präsentiert $SPIELER1 dabei den Intimbereich", 
				180, 300, Arrays.asList(Werkzeug.UMSCHNALLDILDO), Arrays.asList(Werkzeug.VAGINA), Arrays.asList(fesseln, ballknebel, kgMann, plugGross)));		
		result.add(createStrafe(5, "$SPIELER2 knebelt $SPIELER1 und fesselt $SPIELER1 an einen Stuhl. $SPIELER1 trägt dabei einen KG und einen großen Buttplug. $SPIELER2 befriedigt sich dann vor den Augen von $SPIELER1 selber", 
				240, 360, Collections.emptyList(), Arrays.asList(Werkzeug.VAGINA), Arrays.asList(fesseln, ballknebel, kgMann, plugGross)));
		result.add(createStrafe(5, "$SPIELER2 knebelt $SPIELER1 und fesselt $SPIELER1 an einen Stuhl. $SPIELER1 trägt dabei einen KG und einen großen Buttplug. $SPIELER2 befriedigt sich dann vor den Augen von $SPIELER1 selber", 
				240, 360, Collections.emptyList(), Arrays.asList(Werkzeug.PENIS), Arrays.asList(fesseln, ballknebel, kgFrau, plugGross)));
		result.add(createStrafe(5, "$SPIELER2, zwinge $SPIELER1 vor dir auf die Knie, führe dein Glied (oder Strap on) in den Mund von $SPIELER1 ein und zeig mit einem Deepthroat, wer das sagen hat", 30, 90, Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList(), Collections.emptyList()));
		
		result.add(createStrafe(2, "$SPIELER2, führe langsam nach und nach mehr Finger in die Vagina von $SPIELER1 ein, bis $SPIELER1 'STOP' sagt", null, null, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Collections.emptyList()));
		result.add(createStrafe(3, "$SPIELER2, führe langsam nach und nach mehr Finger in den Anus von $SPIELER1 ein, bis $SPIELER1 'STOP' sagt", null, null, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Collections.emptyList()));
	
		result.add(createStrafe(2, "$SPIELER1, geh auf die Knie und reite einen vaginal einen kleinen Dildo, befriedige dabei $SPIELER2 oral.", 60, 120, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.VAGINA), Arrays.asList(dildoKlein)));
		result.add(createStrafe(4, "$SPIELER1, geh auf die Knie und reite einen vaginal einen großen Dildo, befriedige dabei $SPIELER2 oral.", 60, 120, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.VAGINA), Arrays.asList(dildoGross)));
		result.add(createStrafe(2, "$SPIELER1, geh auf die Knie und reite einen anal einen kleinen Dildo, befriedige dabei $SPIELER2 oral.", 60, 120, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.VAGINA), Arrays.asList(dildoKlein)));
		result.add(createStrafe(4, "$SPIELER1, geh auf die Knie und reite einen anal einen großen Dildo, befriedige dabei $SPIELER2 oral.", 60, 120, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.VAGINA), Arrays.asList(dildoGross)));

		result.add(createStrafe(4, "$SPIELER2 dringt in Missionarsstellung in $SPIELER1 und gibt vollgas, dabei packt $SPIELER2 $SPIELER1 am Hals und drückt beherzt zu", 30, 60, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Arrays.asList(dildoGross)));
		result.add(createStrafe(4, "$SPIELER2 dringt in Missionarsstellung anal in $SPIELER1 und gibt vollgas, dabei packt $SPIELER2 $SPIELER1 am Hals und drückt beherzt zu", 30, 60, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Arrays.asList(dildoGross)));

		result.add(createStrafe(2, "$SPIELER2 nimmt die Nippel von $SPIELER1 zwischen die Finger und erhöht langsam den Druck bis $SPIELER1 'STOP' sagt", null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));

		return result ;
	}

	private Strafe createStrafe(Integer level, String text, Integer sekundenVon, Integer sekundenBis, List<Werkzeug> benoetigtBestraftePerson, List<Werkzeug> benoetigtBestrafendePerson, List<Toy> benoetigteToys) {
		Strafe strafe = new Strafe();
		strafe.setLevel(level);
		strafe.setText(text);
		strafe.setSekundenVon(sekundenVon);
		strafe.setSekundenBis(sekundenBis);
		strafe.setBenoetigtBestraftePerson(benoetigtBestraftePerson.stream().map(Werkzeug::toString).toList());
		strafe.setBenoetigtBestrafendePerson(benoetigtBestrafendePerson.stream().map(Werkzeug::toString).toList());
		strafe.setBenoetigteToyIds(benoetigteToys.stream().map(Toy::getId).toList());
		return strafe;
	}

	private List<Sperre> getSperren() {
		List<Sperre> result = new ArrayList<>();
		
		result.add(createSperre("$SPIELER1 legt sich einen KG an, $SPIELER2 spielgt Keyholder. Falls möglich sind Vaginal-Plugs zu verwenden", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem KG zu erlösen", 10, 20, Werkzeug.VAGINA, Arrays.asList(kgFrau)));
		result.add(createSperre("$SPIELER1 legt sich einen KG an, $SPIELER2 spielgt Keyholder", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem KG zu erlösen", 10, 30, Werkzeug.VAGINA, Arrays.asList(kgFrau)));
		result.add(createSperre("$SPIELER1 legt sich einen KG an, $SPIELER2 spielgt Keyholder", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem KG zu erlösen", 10, 30, Werkzeug.PENIS, Arrays.asList(kgMann)));
		result.add(createSperre("$SPIELER1 legt sich einen Peniskäfig an, $SPIELER2 spielgt Keyholder", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Peniskäfig zu erlösen", 10, 30, Werkzeug.PENIS, Arrays.asList(peniskaefig)));
		result.add(createSperre("$SPIELER2 führt $SPIELER1 einen kleinen Plug in den Anus ein, dieser ist bis auf weiteres zu tragen", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Buttplug zu erlösen", 10, 30, Werkzeug.ANUS, Arrays.asList(plugKlein)));
		result.add(createSperre("$SPIELER2 führt $SPIELER1 einen großen Plug in den Anus ein, dieser ist bis auf weiteres zu tragen", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Buttplug zu erlösen", 10, 30, Werkzeug.ANUS, Arrays.asList(plugGross)));
		result.add(createSperre("$SPIELER2 führt $SPIELER1 einen Elektro-Plug in den Anus ein, dieser ist bis auf weiteres zu tragen. $SPIELER2 darf $SPIELER1 !leichte Stromstöße verpassen", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Eletro-Plug zu erlösen", 5, 15, Werkzeug.ANUS, Arrays.asList(eletroPlug)));
		result.add(createSperre("$SPIELER2 führt $SPIELER1 einen Elektro-Plug in die Vagina ein, darüber ist ein KG zu tragen. $SPIELER2 spielt Keyholder und darf $SPIELER1 !leichte Stromstöße verpassen", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Eletro-Plug und KG zu erlösen", 5, 15, Werkzeug.VAGINA, Arrays.asList(eletroPlug, kgFrau)));
		result.add(createSperre("$SPIELER2 führt $SPIELER1 einen kleinen Dildo in die Vagina ein, darüber ist ein KG zu tragen. $SPIELER2 spielt Keyholder", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Dildo und KG zu erlösen", 10, 20, Werkzeug.VAGINA, Arrays.asList(dildoKlein, kgFrau)));
		result.add(createSperre("$SPIELER1 trägt mit sofortiger Wirkung einen Ballknebel, $SPIELER2 achte darauf, dass er schön stramm sitzt", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Knebel zu erlösen", 5, 15, Werkzeug.MUND, Arrays.asList(ballknebel)));
		result.add(createSperre("$SPIELER1 trägt mit sofortiger Wirkung einen Penisknebel, $SPIELER2 achte darauf, dass er schön stramm sitzt", "$SPIELER2, es ist an der Zeit $SPIELER1 von seinem Knebel zu erlösen", 5, 15, Werkzeug.MUND, Arrays.asList(penisknebel)));
		
		return result ;
	}
	
	private Sperre createSperre(String text, String releaseText, Integer minutenVon, Integer minutenBis, Werkzeug verschluss, List<Toy> benoetigteToys) {
		Sperre sperre = new Sperre();
		sperre.setText(text);
		sperre.setReleaseText(releaseText);
		sperre.setMinutenVon(minutenVon);
		sperre.setMinutenBis(minutenBis);
		sperre.setBenoetigteToyIds(benoetigteToys.stream().map(Toy::getId).toList());
		sperre.setVerschluss(verschluss.toString());
		return sperre;
	}

	private List<Beglueckung> getBeglueckungen() {
		List<Beglueckung> result = new ArrayList<>();
		
		result.add(createBeglueckung(1, "$SPIELER2, zeig $SPIELER1 deinen Hintern, gib dir selber dabei ein oder zwei Klasppse auf den Po", null, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, küsse den Hals von $SPIELER1 leidenschaftlich", 30, 60, Collections.emptyList(), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, zeichne mit Küssen den Bauchnabel von $SPIELER1 nach", 30, 60, Collections.emptyList(), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		
		result.add(createBeglueckung(2, "$SPIELER2, berühre den gesamten Körper von $SPIELER1 ohne die Hände zu verwenden", 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		
		result.add(createBeglueckung(1, "$SPIELER1 sitzt vor $SPIELER2, $SPIELER2 küsste leidenschaftlich den Nacken von $SPIELER1", 60, 120, Arrays.asList(Werkzeug.MUND), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, Küsse die Brust von $SPIELER1 ohne die Nippel zu berühren", 60, 120, Arrays.asList(Werkzeug.MUND), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(2, "$SPIELER2, verwöhne die Nippel von $SPIELER1 mit Küssen", 60, 120, Arrays.asList(Werkzeug.MUND), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, küsse den Hintern von $SPIELER1 ohne den Anus zu berühren", 60, 120, Arrays.asList(Werkzeug.MUND), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2, verpasse $SPIELER1 eine Anusmassage mit der Zunge", 60, 120, Arrays.asList(Werkzeug.MUND), Arrays.asList(Werkzeug.ANUS), Collections.emptyList()));

		result.add(createBeglueckung(2, "$SPIELER2, küsse den Intimbereich von $SPIELER1 durch die Unterwäsche", 60, 120, Arrays.asList(Werkzeug.MUND), Collections.emptyList(), Collections.emptyList()));
		

		result.add(createBeglueckung(1, "$SPIELER2, massiere die Brust von $SPIELER1 leidenschaftlich", 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, massiere den Hintern von $SPIELER1 leidenschaftlich", 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, massiere den Rücken von $SPIELER1 leidenschaftlich", 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(1, "$SPIELER2, massiere die Oberschenkel von $SPIELER1 leidenschaftlich", 60, 120, Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
		
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Klitoris von $SPIELER1 mit einem Vibrator" , 30, 180, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(vibrator)));
		result.add(createBeglueckung(4, "$SPIELER2, verwöhne die Klitoris von $SPIELER1 mit einem Vibrator, führe dabei einen Finger in den Anus von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(vibrator)));
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Klitoris von $SPIELER1 mit dem Mund, führe dabei einen bis zwei Finger in die Vagina von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Klitoris von $SPIELER1 mit dem Mund, führe dabei einen Finger in den Anus von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2, verwöhne die Klitoris von $SPIELER1 mit der Hand, führe dabei einen bis zwei Finger in die Vagina von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Klitoris von $SPIELER1 mit der Hand, führe dabei einen Finger in den Anus von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Collections.emptyList(), Collections.emptyList()));
		
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Eichel von $SPIELER1 mit einem Vibrator" , 30, 180, Arrays.asList(Werkzeug.PENIS), Collections.emptyList(), Arrays.asList(vibrator)));
		result.add(createBeglueckung(4, "$SPIELER2, verwöhne die Eichel von $SPIELER1 mit einem Vibrator, führe dabei einen Finger in den Anus von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.PENIS, Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(vibrator)));
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Eichel von $SPIELER1 mit dem Mund" , 30, 180, Arrays.asList(Werkzeug.PENIS), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2, verwöhne die Eichel von $SPIELER1 mit dem Mund, führe dabei einen Finger in den Anus von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.PENIS, Werkzeug.ANUS), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne die Eichel von $SPIELER1 mit der Hand" , 30, 180, Arrays.asList(Werkzeug.PENIS), Collections.emptyList(), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2, verwöhne die Eichel von $SPIELER1 mit der Hand, führe dabei einen Finger in den Anus von $SPIELER1 ein" , 30, 180, Arrays.asList(Werkzeug.PENIS, Werkzeug.ANUS), Collections.emptyList(), Collections.emptyList()));
		
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne den Anus von $SPIELER1 mit einem Vibrator" , 30, 180, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(vibrator)));
		result.add(createBeglueckung(3, "$SPIELER2, verwöhne den Anus von $SPIELER1 mit dem Mund" , 30, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		
		result.add(createBeglueckung(4, "$SPIELER2 liegt auf dem Rücken, $SPIELER1 sitzt auf seinem Gesicht. $SPIELER2, verwöhne die Vagina von $SPIELER1 mit dem Mund" , 60, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 liegt auf dem Rücken, $SPIELER1 sitzt auf seinem Gesicht. $SPIELER2, verwöhne den Anus von $SPIELER1 mit dem Mund" , 60, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));

		result.add(createBeglueckung(4, "69er-Zeit: $SPIELER2 liegt unten. $SPIELER1, falls du verschlossen bist, zeihe einen Strap on an, damit $SPIELER2 auch was zu tun hat.", 60, 180, Arrays.asList(Werkzeug.VAGINA, Werkzeug.MUND), Arrays.asList(Werkzeug.MUND), Collections.emptyList()));
		
		result.add(createBeglueckung(4, "$SPIELER2, führe $SPIELER1 einen Analvibrator ein und verwöhne $SPIELER1 durch langsame Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(analVibrator)));
		result.add(createBeglueckung(3, "$SPIELER2, führe $SPIELER1 einen kleinen Dildo anal ein und verwöhne $SPIELER1 durch langsame Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(dildoKlein)));
		result.add(createBeglueckung(4, "$SPIELER2, führe $SPIELER1 einen großen Dildo anal ein und verwöhne $SPIELER1 durch langsame Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(dildoGross)));
		result.add(createBeglueckung(5, "$SPIELER2, führe $SPIELER1 einen großen Dildo anal ein und verwöhne $SPIELER1 durch schnelle Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(dildoGross)));
		
		result.add(createBeglueckung(3, "$SPIELER2, führe $SPIELER1 einen kleinen Dildo vaginal ein und verwöhne $SPIELER1 durch langsame Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(dildoKlein)));
		result.add(createBeglueckung(4, "$SPIELER2, führe $SPIELER1 einen großen Dildo vaginal ein und verwöhne $SPIELER1 durch langsame Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(dildoGross)));
		result.add(createBeglueckung(5, "$SPIELER2, führe $SPIELER1 einen großen Dildo vaginal ein und bewege selbigen möglichst schnell rein und raus" , 30, 60, Arrays.asList(Werkzeug.VAGINA), Collections.emptyList(), Arrays.asList(dildoGross)));
		
		result.add(createBeglueckung(5, "$SPIELER2, führe $SPIELER1 einen Doppeldildo anal und vaginal ein und bewege selbigen möglichst schnell rein und raus" , 30, 60, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(doppelDildo)));
		result.add(createBeglueckung(4, "$SPIELER2, führe $SPIELER1 einen Doppeldildo anal und vaginal und verwöhne $SPIELER1 durch langsame Bewegungen mit selbigem" , 30, 180, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Collections.emptyList(), Arrays.asList(doppelDildo)));
		
		result.add(createBeglueckung(3, "$SPIELER2 dringt in Missionarstellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen", 60, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Missionarstellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen", 30, 90, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Missionarstellung in $SPIELER1 ein und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Missionarstellung den Anus von $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen", 60, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Missionarstellung den Anus von $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen", 30, 90, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Missionarstellung den Anus von $SPIELER1 und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		
		result.add(createBeglueckung(3, "$SPIELER1 setzt sich in Reiterstellung auf $SPIELER2. $SPIELER1 bestimmt das Tempo", 60, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER1 setzt sich in Reiterstellung auf $SPIELER2. $SPIELER1 versucht das Tempo hoch zu halten", 60, 120, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER1 setzt sich in Reiterstellung auf $SPIELER2 und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		
		result.add(createBeglueckung(3, "$SPIELER1 setzt sich in Reiterstellung mit dem Anus auf $SPIELER2. $SPIELER1 bestimmt das Tempo", 60, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER1 setzt sich in Reiterstellung mit dem Anus auf $SPIELER2. $SPIELER1 versucht das Tempo hoch zu halten", 60, 120, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER1 setzt sich in Reiterstellung mit dem Anus auf $SPIELER2 und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		
		result.add(createBeglueckung(3, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen", 60, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen", 60, 120, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen. Dabei dringt $SPIELER2 mit einem oder zwei Fingern in den Po von $SPIELER1  ein", 60, 180, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen. Dabei dringt $SPIELER2 mit einem oder zwei Fingern in den Po von $SPIELER1  ein", 60, 120, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und gibt vollgas. Dabei dringt $SPIELER2 mit einem oder zwei Fingern in den Po von $SPIELER1  ein", 30, 60, Arrays.asList(Werkzeug.VAGINA, Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein und gibt vollgas. $SPIELER1 darf dabei keinen laut von sich geben.", 30, 60, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2 dringt in Hundestellung in $SPIELER1 ein. $SPIELER2 hält still und $SPIELER1 gibt das Tempo vor", 60, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2 dringt in Hundestellung den Anus von $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen", 60, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Hundestellung den Anus von $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen", 60, 120, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Hundestellung den Anus von $SPIELER1 ein und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2 dringt in Hundestellung den Anus von $SPIELER1 ein. $SPIELER2 hält still und $SPIELER1 gibt das Tempo vor\"", 30, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));

		result.add(createBeglueckung(3, "$SPIELER2 dringt in Löffelchenstellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen", 60, 180, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Löffelchenstellung in $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen", 60, 120, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Löffelchenstellung in $SPIELER1 ein und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.VAGINA), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(3, "$SPIELER2 dringt in Löffelchenstellung den Anus von $SPIELER1 ein und verwöhnt $SPIELER1 mit langsamen Bewegungen", 60, 180, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(4, "$SPIELER2 dringt in Löffelchenstellung den Anus von $SPIELER1 ein und verwöhnt $SPIELER1 mit schnellen Bewegungen", 60, 120, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		result.add(createBeglueckung(5, "$SPIELER2 dringt in Löffelchenstellung den Anus von $SPIELER1 ein und gibt vollgas", 30, 60, Arrays.asList(Werkzeug.ANUS), Arrays.asList(Werkzeug.PENIS, Werkzeug.UMSCHNALLDILDO), Collections.emptyList()));
		
		return result;
	}
	
	private Beglueckung createBeglueckung(Integer level, String text, Integer sekundenVon, Integer sekundenBis, List<Werkzeug> benoetigtBestraftePerson, List<Werkzeug> benoetigtBestrafendePerson, List<Toy> benoetigteToys) {
		Beglueckung beglueckung = new Beglueckung();
		beglueckung.setLevel(level);
		beglueckung.setText(text);
		beglueckung.setSekundenVon(sekundenVon);
		beglueckung.setSekundenBis(sekundenBis);
		beglueckung.setBenoetigteBegluecktePerson(benoetigtBestraftePerson.stream().map(Werkzeug::toString).toList());
		beglueckung.setBenoetigteBeglueckendePerson(benoetigtBestrafendePerson.stream().map(Werkzeug::toString).toList());
		beglueckung.setBenoetigteToyIds(benoetigteToys.stream().map(Toy::getId).toList());
		return beglueckung;
	}

	public static void main(String[] args) throws JAXBException, URISyntaxException {
		new AufgabenCreator().init();
	}
}
