package eu.dnetlib.client.leftColumn;

import com.github.gwtbootstrap.client.ui.AccordionGroup;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.CheckBox;
import com.github.gwtbootstrap.client.ui.Form;
import com.github.gwtbootstrap.client.ui.ListBox;
import com.github.gwtbootstrap.client.ui.Tab;
import com.github.gwtbootstrap.client.ui.TextBox;
import com.github.gwtbootstrap.client.ui.constants.ButtonType;
import com.github.gwtbootstrap.client.ui.constants.FormType;
import com.github.gwtbootstrap.client.ui.constants.IconType;
import com.github.gwtbootstrap.client.ui.event.HideEvent;
import com.github.gwtbootstrap.client.ui.event.HideHandler;
import com.github.gwtbootstrap.client.ui.event.ShowEvent;
import com.github.gwtbootstrap.client.ui.event.ShowHandler;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.LoadEvent;
import com.google.gwt.event.dom.client.LoadHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;

import eu.dnetlib.client.Generate;
import eu.dnetlib.client.widgets.FormFieldSet;
import eu.dnetlib.shared.ValuesOfFields;

public class TitlesPanel implements IsWidget{

	
	
	private FlowPanel flowPanel = new FlowPanel();
	private Button applyChanges = new Button();
	private FormFieldSet xaxis_formField;
	private FormFieldSet yaxis_formField;
	private Form headersForm = new Form();
	
	public TitlesPanel(boolean isFromLoad, Tab titlesTab,int optionSelected) {

		FlowPanel masterPanel = new FlowPanel();

		
		
		applyChanges.setText("Apply");
		applyChanges.addStyleName("applychanges");
		applyChanges.setType(ButtonType.PRIMARY);
		applyChanges.addClickHandler(new ClickHandler() {
			
			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				applyChanges.setEnabled(false);
				applyChanges.removeStyleName("flashing-button-apply");
				Generate.getInstance().getTheme1().addLoadHandler(new LoadHandler() {
					
					@Override
					public void onLoad(LoadEvent event) {
						applyChanges.setEnabled(true);
					}
				});
				Generate.getInstance().generateURLs(ValuesOfFields.getInstance(),1);
			}
		});
		
       

        final TextBox titleTextBox = new TextBox();
        titleTextBox.addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent arg0) {
                // TODO Auto-generated method stub
            	ValuesOfFields.getInstance().setTitle(titleTextBox.getText().replaceAll("\"", "\\\\\""));
            	
				applyChanges.addStyleName("flashing-button-apply");
            }
        });
        headersForm.add(new FormFieldSet("Chart title", titleTextBox));

        final TextBox subtitleTextBox = new TextBox();
        subtitleTextBox.addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent arg0) {
            	ValuesOfFields.getInstance().setSubtitle(subtitleTextBox.getText().replaceAll("\"", "\\\\\""));
            	applyChanges.addStyleName("flashing-button-apply");
            }
        });
        headersForm.add(new FormFieldSet("Chart subtitle", subtitleTextBox));

        final TextBox xaxisTextBox = new TextBox();
        xaxisTextBox.addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent arg0) {
                // TODO Auto-generated method stub
            	ValuesOfFields.getInstance().setXaxis(xaxisTextBox.getText().replaceAll("\"", "\\\\\""));
            	applyChanges.addStyleName("flashing-button-apply");
            }
        });
        

        final TextBox yaxisTextBox = new TextBox();
        yaxisTextBox.addChangeHandler(new ChangeHandler() {

            @Override
            public void onChange(ChangeEvent arg0) {
                // TODO Auto-generated method stub
            	ValuesOfFields.getInstance().setYaxis(yaxisTextBox.getText().replaceAll("\"", "\\\\\""));
            	applyChanges.addStyleName("flashing-button-apply");
            }
        });
        xaxis_formField = new FormFieldSet("Horizontal label", xaxisTextBox);
        yaxis_formField = new FormFieldSet("Horizontal label", yaxisTextBox);
        
        if(optionSelected>=10 && optionSelected<20){
        	headersForm.add(xaxis_formField);
            headersForm.add(yaxis_formField);
        }else{
        	headersForm.add(yaxis_formField);
            headersForm.add(xaxis_formField);
        }
        

        final AccordionGroup titlesGroupPanel = new AccordionGroup();
        titlesGroupPanel.addStyleName("accordionPanel");
        titlesGroupPanel.setHeading("TITLE OPTIONS");
        titlesGroupPanel.getHeading().addStyleName("accordionHeading");
        titlesGroupPanel.add(headersForm);
        titlesGroupPanel.add(applyChanges);
        titlesGroupPanel.setIcon(IconType.MINUS);
        titlesGroupPanel.setDefaultOpen(true);
        titlesGroupPanel.addShowHandler(new ShowHandler() {
            @Override
            public void onShow(ShowEvent showEvent) {
                titlesGroupPanel.setIcon(IconType.MINUS);
            }
        });
        titlesGroupPanel.addHideHandler(new HideHandler() {
            @Override
            public void onHide(HideEvent hideEvent) {
                titlesGroupPanel.setIcon(IconType.PLUS);
            }
        });

        masterPanel.add(titlesGroupPanel);
        
        if(isFromLoad){
        	if(!ValuesOfFields.getInstance().getTitle().isEmpty()){
        		titleTextBox.setText(ValuesOfFields.getInstance().getTitle());
        	}
        	
        	if(!ValuesOfFields.getInstance().getXaxis().isEmpty()){
        		xaxisTextBox.setText(ValuesOfFields.getInstance().getXaxis());
        	}
        	
        	if(!ValuesOfFields.getInstance().getYaxis().isEmpty()){
        		yaxisTextBox.setText(ValuesOfFields.getInstance().getYaxis());
        	}
        	
        	if(!ValuesOfFields.getInstance().getSubtitle().isEmpty()){
        		subtitleTextBox.setText(ValuesOfFields.getInstance().getSubtitle());
        		
        	}
        	
        }
//        titlesGroupPanel.show();
		flowPanel.add(masterPanel);
				

	}
	
	public void titlesForBar(){
		
		headersForm.remove(xaxis_formField);
		headersForm.remove(yaxis_formField);
		
		
        headersForm.add(yaxis_formField);
        headersForm.add(xaxis_formField);
        
       
	}
	
	public void titlesForColumn(){
		
		headersForm.remove(xaxis_formField);
		headersForm.remove(yaxis_formField);
		
		
        headersForm.add(xaxis_formField);
        headersForm.add(yaxis_formField);
      
	}
	
	
	@Override
	public Widget asWidget() {
		return flowPanel;
	}
	
	
	
	
	
	
}
