/* Banana-Chat - The first Open Source Knuddels Emulator
 * Copyright (C) 2011 - 2012 Flav <http://banana-coding.com>
 * 
 * Diese Dateien unterliegen dem Coprytight von Banana-Coding und
 * darf verändert, aber weder in andere Projekte eingefügt noch
 * reproduziert werden.
 * 
 * Der Emulator dient - sofern der Client nicht aus Eigenproduktion
 * stammt - nur zu Lernzwecken, das Hosten des originalen Knuddels Clients
 * ist auf eigene Gefahr und verstößt möglicherweise gegen Schutzrechte
 * der Knuddels.de GmbH & Co KG
 * 
 * Autoren: Flav (Grundversion), Localhost (Erweiterte Version), Kokos-Ice (Erweiterte Version)
 */



package handler;

import netchat.Channel;
import netchat.Client;
import netchat.CommandParser;
import netchat.Server;
import tools.popup.*;
import tools.KCodeParser;
import tools.PacketCreator;

public class MessageHandler {
    public static void handle(String[] tokens, Client client) {
    	String what = tokens[1];
    	
        if (what.equals("mow")) {
        	byte messageSound = Byte.parseByte(tokens[3].trim());
            String signature = KCodeParser.parse(client, tokens[4].trim(), 5, 10, 20);
            
            for(Channel c : client.getChannels()) {
            	client.sendButlerMessage(c.getName(), "Die Einstellungen für deinen _°BB>_hBriefkasten|/m<r°_ wurden gespeichert.");
            }
            
            client.setMessageSound(messageSound);
            
            if(signature.length() > 50) {
                client.send(Popup.create("Problem", "Problem", String.format("Deine Signatur darf nicht länger als 50 Zeichen lang sein. Du musst deine Signatur um %s Zeichen kürzen.", signature.length()-50), 400, 250));
            } else {
            	client.setSignatur(signature);
            }
        } else if (what.equals("message")) {
            String buttons = tokens[2].trim();
            String nickname = KCodeParser.escape(tokens[3].trim());
            String betreff = tokens[4].trim();
            String text = tokens[5].trim();
            betreff = KCodeParser.noKCode(betreff);
            betreff = Server.get().parseSmileys(client, betreff);
            text = KCodeParser.parse(client, text, 5, 10, 20);
            text = Server.get().parseSmileys(client, text);
            long systemtime = System.currentTimeMillis()/1000;
            
            if(buttons.equals("Vorschau")) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
                
            	StringBuilder neu = new StringBuilder();
            	
                neu.append("#°+9022+0013°#");
                
                if(client.getPhoto().isEmpty()) {
                	neu.append("°>nopic_79x79_").append(client.getGender()==1?"m":"f").append("...bordercol_164,164,255.quadcut_49.border_2.jpg<°");
                } else {
                	neu.append("°>photos/l/").append(client.getPhoto()).append("...bordercol_164,164,255.hbordercol_3,0,227.quadcut_49.border_2.jpg<>_h|").append(Server.get().getURL()).append("photo?n=").append(client.getName()).append("<°");
                }
                
                neu.append(" #°+0075+8002°°14°").append("#_°>ong.png<° °B>_h").append(client.getName().replace("<", "\\<")).append("|/serverpp \"|/w \"<K°_#").append(Server.get().timeStampToDate(systemtime)).append(" ").append(Server.get().timeStampToTime(systemtime)).append("#_").append(betreff.isEmpty()?"°r°_":betreff+"§").append("#°+9515°°+0011r+509°").append(text);
                
                client.send(Popup.create("Vorschau deiner Nachricht", "Vorschau deiner Nachricht", neu.toString(), 575, 325));
            	return;
            }
            
            Client target = Server.get().getClient(nickname);

            if (target == null) {
                    target = new Client(null);
                    target.loadStats(nickname);

                    if(target.getName() == null) {
                    	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
                    	client.send(Popup.create("Problem", "Problem", String.format("#Den Nicknamen %s gibt es nicht.", nickname), 400, 250));
                    	return;
                    }
            }
            
            if(betreff.length() > 50) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
            	client.send(Popup.create("Problem", "Problem", "#Deine Nachricht konnte nicht gesendet werden:##Der _Betreff Ihrer Nachricht ist zu lang_, dieser darf höchstens 50 Zeichen lang sein.", 400, 250));
            	return;
            }
            
            if(text.isEmpty()) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
            	client.send(Popup.create("Problem", "Problem", "#Bitte geben Sie einen Text bei Nachricht an.", 400, 250));
            	return;
            }
            
            if(target == Server.get().getButler()) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
            	client.send(Popup.create("Problem", "Problem", String.format("#Deine Nachricht konnte nicht gesendet werden:##An %s können keine Nachrichten geschickt werden.", Server.get().getButler().getName()), 400, 250));
            	return;
            }
            
            if(client.getRank() < 8 && text.length() > 2000) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
            	client.send(Popup.create("Problem", "Problem", "#Deine Nachricht konnte nicht gesendet werden:##Ihre _Nachricht ist zu lang_, sie darf höchstens 2000 Zeichen lang sein.", 400, 250));
            	return;
            }
            
            if(target.getSilence() == 1 && client.getRank() < 5) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
            	client.send(Popup.create("Problem", "Problem", String.format("#%s können derzeit keine Nachrichten hinterlassen werden.", target.getName()), 400, 250));
            	return;
            }
            
            if(target.checkIgnored(client.getName())) {
            	client.send(PacketCreator.createMessageWindow(nickname, betreff, text));
            	client.send(Popup.create("Problem", "Problem", String.format("#Sie werden von %s ignoriert.", target.getName()), 400, 250));
                return;
            }
            
            if(client.checkIgnored(target.getName())) {
            	for(Channel c : client.getChannels()) {
            		client.sendButlerMessage(c.getName(), String.format("_%s steht auf deiner Ignore-Liste_ und wird deshalb nicht antworten können. Mit °BB°_°>/ig !%s|\"<r°_ kannst du %s wieder von der Ignore-Liste löschen.", target.getName(), target.getName(), target.getName()));
            	}
            }
            
            client.sendButlerMessage(client.getChannel().getName(), CommandParser.messageSent(target.getName()));
            Server.get().newMessage(client, target.getName(), betreff, text, systemtime);  
        }
    }
}