package eu.smoser.dungeongenerator.dungeon.objects;

import eu.smoser.dungeongenerator.dungeon.Dungeon;
import eu.smoser.dungeongenerator.util.Dice;

/**
 *
 * @author MrMcX
 */
public class Encounters extends ADungeonObject{
    public Encounters(int num, Dungeon.Type type){
        StringBuilder sb = new StringBuilder();
        for(int i = 1; i <= num; i++){
            sb.append(i);
            sb.append(": ");
            sb.append(Encounter(type));
            sb.append("\n");
        }
        descString = sb.toString();
    }
    
    private static String Encounter(Dungeon.Type type){
        if(Dungeon.Natural(type)){
            switch(Dice.Roll(20, 1)){
                case 1: return "Ein Höhlenbewohner behauptet, er sei der Häuptling eines ganzen Stammes und bietet den Helden die Freundschaft an. In Wirklichkeit ist er nur ein unbedeutender Kundschafter, der keinerlei Befehlsgewalt hat, nachdem er die Helden zum Stamm geführt hat.";
                case 2: return "Ein kleines Höhlenogermädchen wird von einer Riesenamöbe angegriffen.";
                case 3: return "Eine Abenteurergruppe, bestehend aus einem Thorwaler und drei Tulamiden, hat sich in dieser Höhle verschanzt. Sie sind schwer verletzt, ausgehungert und wollen nur noch aus dem Dungeon entkommen.";
                case 4: return "Ein tulamidischer Elementarist hat seine Kraft nicht mehr unter Kontrolle. Wahnsinnig zaubert er einen elementaren Zauberspruch nach dem anderen – anscheinend mit einer unbegrenzten Fülle an Astralpunkten.";
                case 5: return "Vier Höhlenbewohner versuchen ihren Häuptling zu befreien, der in eine Gesteinsspalte gerutscht und nun eingeklemmt ist.";
                case 6: return "Der Großteil dieser Höhle wird von einem tiefen Teich eingenommen. Im klaren Wasser ist ein Tunnel zu entdecken. Darin herrscht allerdings ein starker Sog, der einen in den See einer Nachbarhöhle zieht, aus der es keinen weiteren Ausgang gibt.";
                case 7: return "Eine weiße, blinde Schlange greift den ersten Helden an, der die Höhle betritt.";
                case 8: return "Ein Grolmhändler bietet seine Waren feil. Die Preise sind exorbitant hoch und sein Sortiment ist äußerst beschränkt.";
                case 9: return "Ein völlig untypischer Wühlschrat folgt der stärksten Lichtquelle in dieser Höhle.";
                case 10: return "Vier Höhlenspinnen haben einen völlig verängstigten Kobold in einer Ecke in die Enge getrieben.";
                case 11: return "Eine etwa katzengroße Sphinx thront auf einem kleinen Basaltpodest. Wenn die Helden freundlich auftreten, wird sie eine kryptische und zu diesem Zeitpunkt völlig unverständliche Weissagung von sich geben.";
                case 12: return "Ein Höhlenoger sitzt hier und lässt niemanden durch, der ihm nicht 5 Dukaten gibt. Unglücklicherweise kann er nur bis zwei zählen.";
                case 13: return "Eine aus 5 Personen bestehende zwergische Prospektorengruppe macht hier gerade Rast. Sie sind auf der Suche nach erzhaltigen Kavernen, in die sie ihre Gänge treiben können.";
                case 14: return "An der Decke der Höhle klettert ein Wühlschrat umher, der anscheinend Kristalle erntet.";
                case 15: return "Der komplette Boden dieser Höhle sowie die Wände wimmeln nur so vor Glutlingen. Gibt es hier ein Durchkommen?";
                case 16: return "Ein kleiner Drache liegt in einer der Ecken der Kaverne und rührt sich nicht. Ob er schläft?";
                case 17: return "Im Raum liegt eine eisenverstärkte Truhe, aufgebrochen und anscheinend von woanders hierher geschleppt. Sie ist leer – neben ihr liegen zwei kleine Aschehäufchen.";
                case 18: return "Die Höhle ist völlig mit Eis bedeckt, obwohl es gar nicht so kalt ist.";
                case 19: return "Die Höhle scheint sich zu drehen, wenn man sie betritt. Nach jeweils 5 angefangenen KR ist eine Orientierungs-Probe notwendig, jeweils um einen Punkt mehr als die vorherige erschwert. Gelingt die Probe nicht, verliert man jegliche Orientierung.";
                case 20: return "Ein Höhlendrache sitzt auf seinem Hort, hinter ihm befindet sich ein weiterer Ausgang nach draußen. Er bietet den Helden die Hälfte seines Schatzes an, wenn sie das gesamte Gebäude von ‚Ungeziefer‘ befreien können. Natürlich wird er das Versprechen nicht halten.";
            }
        } else {
            switch(Dice.Roll(20, 1)){
                case 1: return "Ein verletzter Höhlenbewohner bittet die Helden, ihn zurück zu seiner Heimat zu bringen. Er weiß nicht, was er hier tut und warum er verletzt ist.";
                case 2: return "Auf einem Pergament im Raum findet sich ein Teil der Anlage skizziert.";
                case 3: return "Ein Gestaltwandler beobachtet die Gruppe schon länger und erwartet sie in diesem Raum in Gestalt des stärksten Helden der Gruppe oder eines vertrauten Freundes.";
                case 4: return Dice.Roll(6, 1) + " Glutlinge laben sich am frischen Leichnam eines in eine Robe gekleideten Andergasters.";
                case 5: return "Was macht ein waschechter Pirat hier? Das weiß er selber nicht. Eben noch befand er sich auf seinem Schiff auf dem Meer der Sieben Winde.";
                case 6: return "Wolfsratten haben sich hier eingenistet. Ihr Fell scheint aus reinem Gold zu bestehen.";
                case 7: return "In der Höhle befinden sich unterschiedliche Monster, die anscheinend wie bei einer Schwarmintelligenz gegen die Helden zusammenarbeiten: " + EnemyList(Dice.Roll(6, 2), type);
                case 8: return "Ein Grautier galoppiert panisch an den Helden vorbei. Es hat eine Art Satteltasche, in der sich die Ausrüstung eines Aves-Geweihten befindet. Auch 15 Silberdukatenfinden sich in einem kleinen Lederbeutel. In einem Raum ganz in der Nähe befindet sich sein toter Besitzer.";
                case 9: return "Ein tulamidischer und sehr zerstreuter Magier, der vergessen hat, was er hier suchte, rennt an der Abenteurergruppe vorbei. Er ist sehr dankbar, wenn ihm geholfen wird, seinen spitzen Hut wiederzufinden und wieder an den Ausgang zu gelangen.";
                case 10: return "Zwei von vier steinernen Verzierungen auf einem Sims in diesem Raum erweisen sich als Gargyle. Diese sind aber nicht auf Kampf aus, sondern wollen nur von den Helden erfahren, was sich an der Oberfläche in den letzten Jahren alles abgespielt hat.";
                case 11: return "Diese Höhle wird von einem angeketteten Oger bewacht, der nicht mehr weiß, wer ihn hier angekettet hat.";
                case 12: return "In der Höhle hat sich ein Kobold breit gemacht, der partout nichts davon wissen will, dass er hier völlig fehl am Platz ist. Er spricht nur in Reimen und verlangt das auch von den Helden.";
                case 13: return "Die Sensenfalle war wohl zu kompliziert für den mittelreichischen Einbrecher, der tot auf dem Boden liegt. Immerhin hat er die tückische Falle für die Helden entschärft.";
                case 14: return "Das Skelett eines nostrianischen Gelehrten kämpft in der Höhle einen verzweifelten Kampf gegen den Geist eines andergastischen Adligen. Beide haben wichtige Informationen für die Helden – wenn sie mal voneinander ablassen würden.";
                case 15: return "Eine Gruppe Fasarer Magiestudenten hat sich total verlaufen und selbst durch Teleportationsversuche wurde es nicht besser.";
                case 16: return "Zwei Höhlenspinnen kämpfen um den Kadaver einer fast dackelgroßen Ratte.";
                case 17: return "Eine Gruppe von " + Dice.Roll(20, 1) + " Vampirfledermäusen hat einen einzeln reisenden Thorwaler Krieger überwältigt und mit Tollwut infiziert.";
                case 18: return "Ein Grolmhändler bietet seine Waren feil. Die Preise sind exorbitant hoch und sein Sortiment ist äußerst beschränkt.";
                case 19: return "Aus diesem Raum kommt man nur hinaus, wenn man ihn rückwärts wieder verlässt. Alle anderen Versuche landen direkt wieder im gleichen Raum.";
                case 20: return "Ein Höhlendrache sitzt auf seinem Hort, hinter ihm befindet sich ein weiterer Ausgang nach draußen. Er bietet den Helden die Hälfte seines Schatzes an, wenn sie das gesamte Gebäude von ‚Ungeziefer‘ befreien können. Natürlich wird er das Versprechen nicht halten.";
            }
        }
        return "";
    }
    
    private static String EnemyList(int num, Dungeon.Type type){
        StringBuilder out = new StringBuilder();
        for(int i = 0; i < num; i++){
            out.append(new Enemy(type).toString());
            if(i < (num - 1)){
                out.append(", ");
            }
        }
        return out.toString();
    }
}
