package o2mc.io.dimmldependency.Datastreams;

import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.Switch;
import android.widget.TextView;
import android.widget.ToggleButton;

/**
 * Created by nickyromeijn on 12/02/16.
 * DataContainer factory with a switch case to differ between view objects
 * Some view objects have a different way of getting the value so there was no abstract way to solve this.
 */
public class DataContainerFactory {

    public static DataContainer build(View view, String actionType, TrackingData trackingData) {
        DataContainer container = new DataContainer();
        container.setEventType(actionType);
        String viewType = "";

        if(view instanceof EditText){
            Integer[] doNotMatchThese = {InputType.TYPE_TEXT_VARIATION_PASSWORD, InputType.TYPE_NUMBER_VARIATION_PASSWORD,InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD};
            viewType = "EditText";
            EditText e = (EditText) view;
            Boolean safe = true;
            for(Integer i : doNotMatchThese){
                if((i & e.getInputType())>0){
                    safe = false;
                }
            }
            if(safe){
                container.setValue(e.getText().toString());
            } else {
                container.setValue("<HIDDEN>");
            }
        } else if(view instanceof RadioButton){
            viewType = "radioButton";
            container.setValue(String.valueOf(((RadioButton) view).isChecked()));
        } else if(view instanceof ToggleButton){
            viewType = "ToggleButton";
            container.setValue(String.valueOf(((ToggleButton) view).isChecked()));
        } else if(view instanceof Switch){
            viewType = "Switch";
            container.setValue(String.valueOf(((Switch) view).isChecked()));
        } else if(view instanceof Button){
            viewType = "Button";
            Button b = (Button) view;
            container.setValue(b.getText().toString());
        } else if(view instanceof TextView) {
            viewType = "TextView";
            TextView t = (TextView) view;
            container.setValue(t.getText().toString());
        } else if(view instanceof ImageView) {
            viewType = "ImageView";
        }

        container.setAlias(trackingData.getAlias());

        container.setIndexWithinActivity(trackingData.getIndexInActivity());

        try {
            container.setElementId(view.getResources().getResourceName(view.getId()).split("id/")[1]);
        } catch(Exception e){
            container.setElementId("undefined");
            e.printStackTrace();
        }
        container.setViewType(viewType);

        return container;
    }
}
