/*
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.login;

import java.util.ArrayList;
import java.util.List;

import server.Config;
import server.GameServer;
import server.Klass;
import server.XRunnable;

public class ChooseKlassStep {
    
    private final LoginHandler handler;
    
    public ChooseKlassStep(LoginHandler handler) {
        this.handler = handler;
    }
    
    public int run() throws Exception {
        Object[] ret = (Object[])
        GameServer.invokeAndWait(new XRunnable() {
            public Object run() throws Exception {
                List<String> klassStrings = new ArrayList<String>();
                List<Integer> klassIds = new ArrayList<Integer>();
                List<Klass> klasses = new ArrayList<Klass>();
                for (Klass klass : Config.getKlasses()) {
                    if (klass.getAllowNewPlayers()) {
                        klasses.add(klass);
                    }
                }
                if (klasses.isEmpty()) {
                    klasses.add(Config.getUnknownKlass());
                }
                for (Klass klass : klasses) {
                    String menuName = klass.getMenuName();
                    if (menuName == null) {
                        menuName = "*" + klass.getName();
                    }
                    klassStrings.add(menuName + "@ZZZ - " + klass.getDescription());
                    klassIds.add(klass.getId());
                }
                return new Object[] { klassStrings.toArray(new String[] {}), 
                                      klassIds.toArray(new Integer[] {}) };
            }
        });
        String[] menu = (String[]) ret[0];
        Integer[] raceIds = (Integer[]) ret[1];
        handler.println(false, "");
        handler.println(false, "@10FThe following classes are available:");
        int choice = handler.doMenu(menu);
        return raceIds[choice];
    }
    
}