/*
Copyright (C) 2005 David Green <green@couchpotato.net>
All Rights Reserved.

This file is part of Aelfengard.

Aelfengard is proprietary software. You may not redistribute it without
prior written permission from the copyright holder.
*/

package server;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import server.token.TokenString;


public class Group implements Externalizable {

    private static final long serialVersionUID = -7521827709982054069L;
    
    private Set<GroupListener> listeners = new HashSet<GroupListener>();
    
    public Player getLeader() {
        for (Player player : ParentTracker.GROUP.getChildrenOf(this)) {
            return player; // first player is the leader
        }
        return null;
    }
    
    public Collection<Player> players() {
        return ParentTracker.GROUP.getChildrenOf(this);
    }

    public void addGroupListener(GroupListener l) {
        listeners.add(l);
    }
    
    public void removeGroupListener(GroupListener l) {
        listeners.remove(l);
    }

    public void notifyGroupMemberAdded(Player player) {
        for (GroupListener l : listeners) {
            l.groupMemberAdded(player);
        }
    }

    public void notifyGroupMemberChanged(Player player) {
        for (GroupListener l : listeners) {
            l.groupMemberChanged(player);
        }
    }

    public void notifyGroupMemberRemoved(Player player) {
        for (GroupListener l : listeners) {
            l.groupMemberRemoved(player);
        }
    }

    public void notifyGroupMemberHealth(Player player, long hp, long maxHP) {
        for (GroupListener l : listeners) {
            l.groupMemberHealth(player, hp, maxHP);
        }
    }
    
    public void sendText(RoomEntity exception, TokenString audio, TokenString visual, TokenString both, TokenString any, String[] strings, RoomEntity... entities) {
        for (Player p : players()) {
            if (p == exception) {
                continue;
            }
            p.sendText(true, audio, visual, both, any, strings, entities);
        }
    }

    public void writeExternal(ObjectOutput out) throws IOException {
        out.writeInt(1); // protocol version
    }

    public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
        in.readInt(); // protocol version
    }

}