package com.planet_ink.coffee_mud.core.intermud.i3.packets;
import com.planet_ink.coffee_mud.core.intermud.i3.server.*;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.core.collections.*;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;


import java.util.Vector;

/**
 * Copyright (c) 1996 George Reese
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
@SuppressWarnings("unchecked")
public class ChannelPacket extends Packet  {
    public String channel = null;
    public String sender_visible_name = null;
    public String message = null;
    public String message_target = null;
    public String target_visible_name = null;

	public ChannelPacket()
	{
		super();
        type = ChannelPacket.CHAN_MESSAGE;
	}
    public ChannelPacket(Vector v) throws InvalidPacketException {
        super(v);
        try {
            String str = (String)v.elementAt(0);

			channel = (String)v.elementAt(6);
            channel = Intermud.getLocalChannel(channel);
            if( str.equals("channel-e") ) 
            {
                type = ChannelPacket.CHAN_EMOTE;
                sender_visible_name = (String)v.elementAt(7);
                message = (String)v.elementAt(8);
            }
            else
            if( str.equals("channel-t") ) 
            {
                type = ChannelPacket.CHAN_TARGET;
                target_mud=(String)v.elementAt(7);
                target_name=(String)v.elementAt(8);
                message=(String)v.elementAt(9);
                message_target=(String)v.elementAt(10);
                sender_visible_name = (String)v.elementAt(11);
                target_visible_name = (String)v.elementAt(12);
            }
            else
            {
                type = ChannelPacket.CHAN_MESSAGE;
                sender_visible_name = (String)v.elementAt(7);
                message = (String)v.elementAt(8);
            }
        }
        catch( ClassCastException e ) {
            throw new InvalidPacketException();
        }
    }

	
    public ChannelPacket(int t, String chan, String who, String vis, String msg) {
        super();
        type = t;
        channel = chan;
        sender_visible_name = vis;
        sender_name = who;
        message = msg;
    }

    public void send() throws InvalidPacketException {
        if( channel == null || sender_visible_name == null ) {
            throw new InvalidPacketException();
        }
        channel = Intermud.getRemoteChannel(channel);
        message = convertString(message);
        super.send();
    }

    public String toString() {
		String str=null;
        if(type==CHAN_TARGET)
			 str="({\"channel-t\",5,\"" + I3Server.getMudName() + "\",\"" +
             sender_name + "\",0,0,\"" + channel + "\",\"" +
             target_mud + "\",\"" + target_name + "\",\"" +
             message + "\",\"" + message_target + "\",\"" +
             sender_visible_name + "\",\"" + target_visible_name + "\",})";
        else
        if(type==CHAN_EMOTE)
			 str="({\"channel-e\",5,\"" + I3Server.getMudName() + "\",\"" +
             sender_name + "\",0,0,\"" + channel + "\",\"" +
             sender_visible_name + "\",\"" + message + "\",})";
        else
			 str="({\"channel-m\",5,\"" + I3Server.getMudName() + "\",\"" +
               sender_name + "\",0,0,\"" + channel + "\",\"" +
               sender_visible_name + "\",\"" + message + "\",})";
		return str;
    }
}
