package bndtools.wizards.project;

import java.util.HashSet;
import java.util.Set;

import org.bndtools.api.ProjectLayout;
import org.bndtools.api.ProjectPaths;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;

public class ProjectLayoutGroup {
	private final String		groupTitle;
	private ProjectLayout		chosenProjectLayout	= ProjectLayout.BND;
	private final Set<Button>	layoutChoices		= new HashSet<>();

	public ProjectLayoutGroup(String title) {
		this.groupTitle = title;
	}

	public Control createControl(Composite parent) {
		Group group = new Group(parent, SWT.NONE);
		group.setText(groupTitle);
		group.setLayout(new GridLayout(Math.max(4, ProjectLayout.values().length), true));

		SelectionListener radioListener = new SelectionAdapter() {
			@Override
			public void widgetSelected(SelectionEvent e) {
				for (Button button : layoutChoices) {
					if (button.getSelection()) {
						assert (button.getData() instanceof ProjectLayout);
						chosenProjectLayout = (ProjectLayout) button.getData();
						return;
					}
				}
			}
		};

		for (ProjectLayout projectLayout : ProjectLayout.values()) {
			ProjectPaths projectPaths = ProjectPaths.DEFAULT;
			final Button radioButton = new Button(group, SWT.RADIO);
			radioButton.setText(projectPaths.getTitle());
			radioButton.setData(projectLayout);
			radioButton.setSelection(this.chosenProjectLayout == projectLayout);
			radioButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
			radioButton.setToolTipText(projectPaths.getToolTip());
			radioButton.addSelectionListener(radioListener);

			layoutChoices.add(radioButton);
		}

		return group;
	}

	public ProjectLayout getProjectLayout() {
		return chosenProjectLayout;
	}
}
