
package hu.swankey.ammo.common.yggdrasil.ext;

import hu.swankey.ammo.common.yggdrasil.basics.ComplexObject;
import hu.swankey.ammo.common.yggdrasil.basics.IntegerField.YIntegerClass;
import hu.swankey.ammo.common.yggdrasil.definition.VariableDefinition;


public class FieldObject extends ComplexObject {
    
    public static final String KEY_COORDX = "coordx";
    public static final String KEY_COORDY = "coordy";
    
    public FieldObject(String name, ComplexClass type) {
        super(name, type);
    }
    
    public void setCoordX(Integer newValue){
        set(KEY_COORDX, newValue);
    }
    
    public Integer getCoordX(){
        return getIntegerField(KEY_COORDX).getValue();
    }
    
    public void setCoordY(Integer newValue){
        set(KEY_COORDY, newValue);
    }
    
    public Integer getCoordY(){
        return getIntegerField(KEY_COORDY).getValue();
    }
    
    
    public static FieldObjectClass yclass() {
        return FieldObjectClass.singleton();
    }
    
    @Override
    public FieldObjectClass getYClass(){
        return (FieldObjectClass) super.getYClass();
    }

    public static class FieldObjectClass extends ComplexClass {

        private static final String CLASS_NAME = "FieldObject";
        private static FieldObjectClass singleton;
        
        public static FieldObjectClass singleton() {
            
            if (singleton == null){
                singleton = new FieldObjectClass(CLASS_NAME);
                singleton.addElement( VariableDefinition.yclass().create(KEY_COORDY, YIntegerClass.singleton(),  null));
                singleton.addElement( VariableDefinition.yclass().create(KEY_COORDX, YIntegerClass.singleton(),  null));
            }
            
            return singleton;
        }
        
        protected FieldObjectClass(String name) {
            super(name, null);
        }
        
        
        @Override
        public Command create(String name) {
            Command newCommand = new Command(name, this);
            init(newCommand);
            return newCommand;
        }
        
        public Command create(String title, String command, String primary, String secondary){
            String name = title.replaceAll(" ", "_");           
            Command cmd = new Command(name, this);          
            init(cmd);
            
            if (primary != null)
                cmd.setPrimaryClass(primary);
            
            if (secondary != null)
                cmd.setSecondaryClass(secondary);
            
            cmd.setTitle(title);
            cmd.setCommand(command);
            
            return cmd;
        }
        
    }

}

