package project;

import java.lang.reflect.Method;
import java.util.Hashtable;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class FormConfigurationv1 {
	
	String[] labelNames;
	String[] fieldNames;
	Class[] fieldClass;
	int[] fieldSize;
	Hashtable<Integer,List<String>> fieldOptionsValue;
	Hashtable<Integer,List<String>> fieldOptionsDisplay;
	Object formDataObject;
	int totalFields;
	int gridSize;
	
	public FormConfigurationv1(){
		
	}

	
	public void setLabelNames(String[] labelNames){
		this.labelNames=labelNames;
	}
	
	public void setFieldNames(String[] fieldNames){
		this.fieldNames=fieldNames;
	}
	
	public void setFieldClass(Class[] fieldClass){
		this.fieldClass=fieldClass;
	}
	
	public void setFieldSize(int[] fieldSize){
		this.fieldSize=fieldSize;
	}
	
	public void setFieldOptionsValue(Hashtable<Integer,List<String>> fieldOptionsValue){
		this.fieldOptionsValue=fieldOptionsValue;
	}
	
	public void setFieldOptionsDisplay(Hashtable<Integer,List<String>> fieldOptionsDisplay){
		this.fieldOptionsDisplay=fieldOptionsDisplay;
	}
	
	public JComponent getLabel(int index){
		return new JLabel(labelNames[index]);
	}
	
	public JComponent getField(int index){
		if (fieldClass[index]==JTextField.class){
			return new JTextField(fieldSize[index]);
		}
		else if (fieldClass[index]==RoundedTextField.class){
			return new RoundedTextField("",fieldSize[index]);
		}
		else if (fieldClass[index]==RoundedTextArea.class){
			return new RoundedTextArea(3,fieldSize[index]);
		}
		else if (fieldClass[index]==RadioButtons.class){
			String[] options=(String[])(fieldOptionsDisplay.get(index).toArray());
			return new RadioButtons(options,1);
		}
		return null;
	}
	
	public void setFormData(Object formDataObject){
		this.formDataObject=formDataObject;
	}
	
	public int getTotalFields(){
		return labelNames.length;
	}
	

	public int getGridSize(){
		return gridSize;
	}
	
	public void setGridSize(int gridSize){
		this.gridSize=gridSize;
	}
	
	public void BindForm(GenericForm3 form){
		for (int i=0;i< fieldNames.length;i++){
			String methodName="get"+fieldNames[i];
			
			try {
				Class<?>[] parameters={};
				Object[] paramData={};
				Method method=formDataObject.getClass().getDeclaredMethod(methodName, parameters);
				
				Object obj =method.invoke(formDataObject, paramData);
				JComponent component =form.getFieldComponent(i);
				if (component instanceof RoundedTextField){
					if (obj instanceof String){
					 ((RoundedTextField) component).setText((String)obj);
					}
					else if (obj instanceof Integer){
						((RoundedTextField) component).setText(obj.toString());
					}
				}
				else if (component instanceof RadioButtons){
					if (obj instanceof String){
						List<String> options=(List<String>)fieldOptionsValue.get(i);
						int index=options.indexOf(obj);
						 ((RadioButtons) component).setText(index);
						}
						else if (obj instanceof Integer){
							List<String> options=(List<String>)fieldOptionsValue.get(i);
							int index=options.indexOf(obj.toString());
							((RadioButtons) component).setText(index);
							
						}
				}
				
				
			} catch (Exception e) {
				e.printStackTrace();
			} 
			
		}
		
	}
	
}
