/*
 * Written and copyright 2001-2004 Tobias Minich. Distributed under the GNU
 * General Public License; see the README file. This code comes with NO
 * WARRANTY.
 * 
 * Move.java
 * 
 * Created on 23.03.2004
 *
 */
package org.gudy.azureus2.ui.console.commands;

import java.util.*;

import org.gudy.azureus2.core3.util.AERunStateHandler;
import org.gudy.azureus2.ui.console.ConsoleInput;

/**
 * @author Tobias Minich
 */
public class RunState extends IConsoleCommand {

	public RunState()
	{
		super("runstate", "rs");
	}
	
	public String getCommandDescriptions()
	{
		return("runstate\t\trs\tShows and modified the current Vuze run-state.");
	}
	
	public void execute(String commandName, ConsoleInput ci, List<String> args) {
		
		ci.out.println( "Current run state:" );
		
		long mode = AERunStateHandler.getResourceMode();
		
		Map<String,Long>	mode_map = new HashMap<String,Long>();
		
		mode_map.put( "all", AERunStateHandler.RS_ALL_LOW );
		
		for ( int i=0;i<AERunStateHandler.RS_MODES.length;i++){
			
			String 	mode_name 	= AERunStateHandler.RS_MODE_NAMES[i];
			long 	mode_value 	= AERunStateHandler.RS_MODES[i];
			
			String[] bits = mode_name.split(":");
			
			for ( String bit: bits ){
				
				mode_map.put( bit.trim().toLowerCase(), mode_value );
			}
		}
		
		boolean	bad = false;
		
		for ( String arg: args ){
		
			String[] bits = arg.split( "=" );
			
			if ( bits.length != 2 ){
				
				bad = true;
				
				break;
			}
			
			Long this_mode = mode_map.get( bits[0].toLowerCase());
			
			if ( this_mode == null ){
				
				bad = true;
				
			}else{
				
				boolean	on = false;
				
				String rhs = bits[1].toLowerCase();
				
				if ( rhs.equals( "on" )){
					
					on = true;
					
				}else if ( rhs.equals( "off" )){
					
				}else{
					
					bad = true;
				}
				
				if ( !bad ){
					
					if ( on ){
						
						mode |= this_mode;
					}else{
						mode &= ~this_mode;
					}
					
					AERunStateHandler.setResourceMode( mode );
				}
			}
		}
		
		if ( bad ){
			
			ci.out.println("> Command 'runstate': invalid parameters (example: dui=On, all=off)" ); 
			
		}else{
			
			for ( int i=0;i<AERunStateHandler.RS_MODES.length;i++){
				
				String 	mode_name 	= AERunStateHandler.RS_MODE_NAMES[i];
				long 	mode_value 	= AERunStateHandler.RS_MODES[i];
								
				ci.out.println( "\t" + mode_name + "=" + ((mode&mode_value)==0?"Off":"On" ));
			}
		}
	}
}
