/* 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.Client;
import netchat.Server;
import netchat.Settings;
import tools.KCodeParser;
import tools.popup.Popup;

public class CodeHandler {
    
    public static void handle(String[] tokens, Client client) {
    	String what = tokens[1].trim();
    	
    	if(what.equals("giveaway")) {
    		String nick = tokens[3].trim();
            String code1 = tokens[4].trim();
            String code2 = tokens[5].trim();
            String code3 = tokens[6].trim();
            String code4 = tokens[7].trim();
            String text = tokens[8].trim();
            String code = String.format("%s-%s-%s-%s", code1, code2, code3, code4);
            Client target = Server.get().getClient(nick);
            boolean online = true;
            long time = System.currentTimeMillis()/1000;
            
            if(target == null) {
            	online = false;
            	target = new Client(null);
            	target.loadStats(nick);
            	
            	if(target.getName() == null) {
                    client.send(Popup.create("Fehler", "Fehler", String.format("#Der Nick _%s existiert nicht_.", nick), 400, 250));
            		return;
            	}
            }
            
            if(!Server.get().checkCodeActivated(code)) {
                client.send(Popup.create("Fehler", "Fehler", String.format("#Der Code _%s ist ungültig_.", code), 400, 250));
                return;
            }
            
            if(text.isEmpty()) {
            	client.send(Popup.create("Fehler", "Fehler", "Bitte gib einen Text zum Geschenk an.", 400, 250));
                return;
            }
            
            if(text.length() > 2000) {
            	client.send(Popup.create("Fehler", "Fehler", "Der Text zum Geschenk ist _zu lang_.", 400, 250));
            	return;
            }
            
            if(target == client || target == Server.get().getButler()) {
            	client.send(Popup.create("Fehler", "Fehler", String.format("Du kannst das Geschenk nicht an %s verschenken.", target.getName()), 400, 250));
            	return;
            }
            
            if(!client.getChannel().getClients().contains(target)) {
            	client.send(Popup.create("Fehler", "Fehler", String.format("%s muss sich im gleichen Channel wie du befinden.", target.getName()), 400, 250));
            	return;
            }
            
            client.send(Popup.create("Geschenk überbracht", "Geschenk überbracht", String.format("Das Geschenk wird %s überbracht.", target.getName()), 400, 250));
            int codeActivatedCategory = Integer.parseInt(Settings.getCodes().split(code)[1].split("\\|")[0].substring(1));
            
            text = KCodeParser.parse(client, text, 5, 10, 20);
            text = Server.get().parseSmileys(client, text);
            
            if(online) {
            	client.getChannel().broadcastButlerMessage(String.format("_Überraschung %s!_ Ein °>present.gif|present_ani.gif<>|/shop<>--<r° wurde für dich hinterlegt:##Ein °>present.gif|present_ani.gif<>|/shop<>--<r° von °>%s|/serverpp \"|/w \"<°:##%s##\"erhalten am %s %s\"", target.getName(), client.getName(), text, Server.get().timeStampToDate(time), Server.get().timeStampToTime(time)));
            	target.activateSmiley(codeActivatedCategory);
            } else {
            	Server.get().query(String
        				.format("insert into `presents` set category = '%s', von = '%s', an = '%s', text = '%s', uhrzeit = '%s'",
        						codeActivatedCategory, client.getName(), target.getName(),
        						Server.get()
        								.parseSmileys(client, text.replace("'", "\\'")),
        						time));
            }
            
            client.setVerschenkt(client.getVerschenkt()+1);
            Settings.setCodes(Settings.getCodes().replace(String.format("|%s~%s|", code, codeActivatedCategory), ""));
    	} else if (what.equals("activate")) {
            String code1 = tokens[3].trim();
            String code2 = tokens[4].trim();
            String code3 = tokens[5].trim();
            String code4 = tokens[6].trim();
            String code = String.format("%s-%s-%s-%s", code1, code2, code3, code4);
            
            if(!Server.get().checkCodeActivated(code)) {
                client.send(Popup.create("Hinweis", "Hinweis", "#Ungültiger Code.", 400, 250));
                return;
            }
            
            int codeActivatedCategory = Integer.parseInt(Settings.getCodes().split(code)[1].split("\\|")[0].substring(1));
            String categoryName = Server.smileyCategories.get(codeActivatedCategory)[0];
            
            client.send(Popup.create("Code aktiviert", "Code aktiviert", String.format("Du hast einen _%s-Code aktiviert_.", categoryName), 400, 250));
            client.activateSmiley(codeActivatedCategory);
            Settings.setCodes(Settings.getCodes().replace(String.format("|%s~%s|", code, codeActivatedCategory), ""));
        } else if (what.equals("activate")) {
        	
        }
    }
}
