/*
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.Race;
import server.XRunnable;

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