import java.awt.Desktop;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class Packliste {
private final static String FILETYPE = ".md";
private static boolean hotel;
private static boolean camping;
private static boolean camera;
private static boolean cellphone;
private static boolean beach;
private static boolean summer;
private static boolean hiking;
private static boolean lightweight;
private static boolean books;
private static int days;
private static Scanner s = new Scanner(System.in);
private static String output;
public static void main(String[] args){
output = "";
System.out.println("Willkommen beim Packlisten-Konfigurator!");
days = askIntQuestion("Wie lange soll deine Reise gehen (in Tagen)?");
summer = askYnQuestion("Wird es ein Sommerurlaub?", true);
hotel = askYnQuestion("Bist du im Hotel?", true);
if(!hotel){
camping = askYnQuestion("Gehst du campen?", true);
}
hiking = askYnQuestion("Gehst du wandern?", true);
camera = askYnQuestion("Möchtest du eine Kamera mitnehmen?", true);
cellphone = askYnQuestion("Möchtest du dein Handy mitnehmen?", true);
beach = askYnQuestion("Bist du am Meer oder einem Swimming-Pool?", true);
lightweight = !askYnQuestion("Reist du mit wenig Gepäck?", false);
books = !askYnQuestion("Möchtest du im Urlaub Bücher lesen?", false);
//if(books && lightweight) System.out.println("Sorry, aber bei wenig Gepäck muss irgendwas zurückbleiben...");
addToOutput();
writeToFile();
}
private static boolean askYnQuestion(String question, boolean yesAsDefault){
if(yesAsDefault) question += " [J/n] ";
else question += " [j/N] ";
System.out.print(question);
String tmp = s.nextLine();
tmp = tmp.toLowerCase();
boolean trueAnswer = tmp.equals("");
if(trueAnswer) return true;
if(yesAsDefault) trueAnswer = tmp.equals("j");
else trueAnswer = tmp.equals("n");
return trueAnswer;
}
private static String askStringQuestion(String question){
System.out.print(question + " ");
return s.nextLine();
}
private static int askIntQuestion(String question){
return Integer.parseInt(askStringQuestion(question));
}
private static void addToOutput(){
int packDays;
if(lightweight) packDays = (int) Math.ceil(days / 2.0); //TODO ;)
else packDays = days;
int foo = (int) Math.ceil(days / 3.0);
if(foo == 0) foo = 1;
//Klamotten
output += "# Klamotten\n";
output += "- " + packDays + " T-Shirts\n";
output += "- " + packDays + " Socken\n";
output += "- 1 Paar Schuhe\n";
output += "- " + packDays + " Unterhosen\n";
if(summer){
output += "- 1 Hose\n";
output += "- " + foo + " kurze Hosen\n";
} else {
output += "- " + foo + " Hosen\n";
output += "- " + foo + " Pullover\n";
}
output += "- 1 Regenjacke\n";
if(lightweight && camping) output += "- Microfaser-Handtuch\n";
else output += "- Handtuch\n";
if(beach){
output += "- Badehose\n";
output += "- Strand-Handtuch\n";
output += "- *Schnorchel-Set*\n";
output += "- *Badeschuhe*\n";
}
output += "\n";
//Hygiene-Kram
output += "# Hygiene-Kram\n";
output += "- Zahnbürste\n";
output += "- Zahnpasta\n";
output += "- Deo\n";
output += "- Duschgel & Shampoo\n";
output += "- Erste-Hilfe-Tasche\n";
if(summer || beach) output += "- Sonnencreme\n";
output += "\n";
//Camping
if(camping){
output += "# Camping\n";
output += "- Zelt\n";
output += "- Schlafsack\n";
output += "- Isomatte\n";
output += "- Stirnlampe\n";
output += "- Kocher\n";
output += " - Gas/Benzin/Spiritus\n";
output += "- Teller\n";
output += "- Besteck\n";
output += "- Tasse\n";
output += "- Becher\n";
} else if(hotel){
//TODO
}
if(hiking){
output += "- Wanderkarten\n";
output += "- Wanderschuhe\n";
}
output += "\n";
output += "# Kram\n";
output += "- Notizblock\n";
output += "- Stifte\n";
output += "\n";
if(hasEntertainment()){
output += "# Unterhaltung\n";
if(books){
output += "- Bücher\n";
}
output += "\n";
}
if(hasElectronics()){
output += "# Elektronik\n";
if(camera){
output += "## Kamera\n";
output += "- Kamera\n";
output += " - Objektive\n";
if(!lightweight) output += " - Stativ\n";
if(camera) output += "- *Action-Kamera*\n";
output += "- Ladekabel\n";
output += "- Akkus\n";
output += "- Speicherkarten\n";
}
if(cellphone){
output += "## Handy\n";
output += "- Ladekabel\n";
}
output += "\n";
}
}
private static void writeToFile(){
String filename = "";
boolean ownName = !askYnQuestion("Möchtest du deiner Liste einen Namen geben?", false);
if(ownName){
filename = askStringQuestion("Bitte Dateinamen eingeben:");
} else {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-dd-HHmmss");
filename = "packliste-" + sdf.format(new Date());
}
filename += FILETYPE;
PrintWriter writer = null;
File file = new File(filename);
try {
writer = new PrintWriter(file, "UTF-8");
} catch (FileNotFoundException e) {
//TODO
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if(output.endsWith("\n\n")) output = output.substring(0, output.length()-2);
writer.print(output);
writer.close();
boolean openNow = !askYnQuestion("Möchtest du die Packliste jetzt öffnen?", false);
if(openNow){
Desktop d = Desktop.getDesktop();
try {
d.open(file);
} catch (IOException e) {
//TODO Wann kann das passieren?
e.printStackTrace();
}
}
System.out.println("Erhol dich gut in deinem " + days + " tägigen Urlaub und gute Reise!");
}
private static boolean hasEntertainment(){
return books;
}
private static boolean hasElectronics(){
return camera || cellphone;
}
}