/** (C) Game Page Network, Inc., Confidential, All Rights Reserved */
// ResetCommand.java
// --paul@gamepage.net, 26nov97

import java.io.*;
import java.util.*;

public class ResetCommand extends Command {
  ResetCommand() {
    super("reset", 3, "TABLE PLAYER1 PLAYER2",
	  "Reset current TABLE with roles PLAYER1 PLAYER2.\n"+
          "See also: tables, open, observe, leave.");
  }
  public void process(StringTokenizer args, Client c) {
    Member current = c.getMember();  
    String name = args.nextToken();
    String p1 = args.nextToken();
    String p2 = args.nextToken();
    Table table = Table.find(name);
    String error = "! reset "+name+": ";
    if (table==null) {
      c.send(error+"No such table.");
      return;
    }
    if (!current.isPlayer(table)) {
      c.send(error+"You are not a player.");
      return;
    }
    Game game = table.getGame();
    if (game==null) {
      c.send(error+"No game.");
      return;
    }
    if (game.isActive()) {
      c.send(error+"Game is active.");
      return;
    }
    Member player1 = Member.findMember(p1);
    Member player2 = Member.findMember(p2);
    if (player1==null) {
      c.send(error+"No such player1 "+p1);
      return;
    } else if (player2==null) {
      c.send(error+"No such player2 "+p2);
      return;
    } else if (game.gameState=='b' && !game.isLead(current)) {
      c.send(error+"Game Reset at start only by player1, not "
	     +current);
      return;
    } else if (game.gameState=='e' && game.isLead(current)) {
      c.send(error+"Game Reset at end only by player2, not "
	     +current);
      return;
    }
    if (game.reset(player1,player2)) {
      table.tell("setup "+table+" "+
		 p1+" "+player1.getRating(false)+" "+player1.getCountry()+" "+
		 p2+" "+player2.getRating(false)+" "+player2.getCountry()+" ",
		 Table.P1);
    } else {
      c.send(error+"Game in progress.");
    }
  }
}

