package com.interpress_project.modernshare.client.view.wizard;

import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;

import com.interpress_project.modernshare.client.controller.model.RootStatus;

/**
 * @stereotype Wizard page3
 */
public class CheckoutWizardPage3 extends WizardPage {
	private Button btnActiveYes, btnActiveNo, btnPc2host, btnHost2pc;
	private RootStatus status;
	private boolean bPc2host;

	/**
	 * RegWizardPage2
	 */
	public CheckoutWizardPage3() {
		super("CheckoutWizardPage3");

		setTitle("オプションの指定");
		setDescription("ホットショット・フォルダにオプションを指定します。");
		setPageComplete(false);

		setStatus(RootStatus.active);
		setPc2host(true);
	}

	/**
	 * createControl
	 */
	public void createControl(Composite parent) {
		Composite composite = new Composite(parent, SWT.NULL);
		GridLayout layout = new GridLayout();
		composite.setLayout(layout);
		layout.numColumns = 2;
		layout.verticalSpacing = 9;

		/**
		 * アクティブに関するチェックボックス
		 */
		{
			Group grpActive = new Group(composite, SWT.SHADOW_IN);
			GridData data = new GridData(GridData.FILL_HORIZONTAL);
			data.horizontalSpan = 9;
			data.verticalSpan = 9;
			grpActive.setLayoutData(data);

			grpActive.setText("監視状態の設定");
			grpActive.setLayout(new RowLayout(SWT.VERTICAL));

			Label label = new Label(grpActive, SWT.NONE);
			label.setText("ホットショット・フォルダに対する自動監視を指定します。\n");
			label.setLocation(20, 20);
			label.pack();

			btnActiveYes = new Button(grpActive, SWT.RADIO);
			btnActiveYes.setText("有効");
			btnActiveYes.setToolTipText("ホットショット・フォルダはプロパティで指定された周期に従ってデータセンタ間で自動同期されます。");
			btnActiveYes.setSelection(false);
			btnActiveYes.addSelectionListener(new SelectionAdapter() {
				public void widgetSelected(SelectionEvent selectionEvent) {
					setStatus(RootStatus.active);
					pageComplete();
				}
			});

			btnActiveNo = new Button(grpActive, SWT.RADIO);
			btnActiveNo.setText("無効");
			btnActiveNo.setToolTipText("ホットショット・フォルダに対する自動更新は行われません。手動でデータセンタとの同期を行う必要があります。");
			btnActiveNo.setSelection(false);
			btnActiveNo.addSelectionListener(new SelectionAdapter() {
				public void widgetSelected(SelectionEvent selectionEvent) {
					setStatus(RootStatus.deactive);
					pageComplete();
				}
			});
		}
		/**
		 * 更新方向に関するチェックボックス
		 */
		{
			Group grpActive = new Group(composite, SWT.SHADOW_IN);
			GridData data = new GridData(GridData.FILL_HORIZONTAL);
			data.horizontalSpan = 9;
			data.verticalSpan = 9;
			grpActive.setLayoutData(data);

			grpActive.setText("同期ポリシーの設定");
			grpActive.setLayout(new RowLayout(SWT.VERTICAL));

			Label label = new Label(grpActive, SWT.NONE);
			label.setText("ホットショット・フォルダとデータセンタの同期ポリシーを設定します。");
			label.setLocation(20, 20);
			label.pack();

			btnPc2host = new Button(grpActive, SWT.RADIO);
			btnPc2host.setText("ホットショット・フォルダ(PC) → データセンタ");
			btnPc2host.setToolTipText("常にホットショット・フォルダに格納されたデータを、データセンタへ更新します。");
			btnPc2host.setSelection(false);
			btnPc2host.addSelectionListener(new SelectionAdapter() {
				public void widgetSelected(SelectionEvent selectionEvent) {
					setPc2host(true);
					pageComplete();
				}
			});
			btnPc2host.setSelection(true);

			btnHost2pc = new Button(grpActive, SWT.RADIO);
			btnHost2pc.setText("データセンタ → ホットショット・フォルダ(PC)");
			btnHost2pc.setToolTipText("データセンタに格納されるデータでホットショット・フォルダを更新します。ホットショット・フォルダを読込専用の共有にする場合に便利です。");
			btnHost2pc.setSelection(false);
			btnHost2pc.addSelectionListener(new SelectionAdapter() {
				public void widgetSelected(SelectionEvent selectionEvent) {
					setPc2host(false);
					pageComplete();
				}
			});
		}
		// Register controls.
		setControl(composite);
	}

	/**
	 * setStatus
	 * @param status
	 */
	private void setStatus(RootStatus status) {
		this.status = status;
	}

	/**
	 * getStatus
	 * @return
	 */
	public RootStatus getStatus() {
		return status;
	}

	/**
	 * setPc2host
	 * @param b
	 */
	private void setPc2host(boolean b) {
		this.bPc2host = b;
	}

	/**
	 * getPc2host
	 * @return
	 */
	public boolean getPc2host() {
		return this.bPc2host;
	}

	/**
	 * pageIncomplete
	 * @param msg
	 */
	protected void pageIncomplete(String msg) {
		setErrorMessage(msg);
		setPageComplete(false);
	}

	/**
	 * pageComplete
	 */
	protected void pageComplete() {
		if ((btnActiveYes.getSelection() || btnActiveNo.getSelection())
		    && (btnPc2host.getSelection() || btnHost2pc.getSelection())) {
			setErrorMessage(null);
			setPageComplete(true);
		}
		else {
			setPageComplete(false);
		}
	}

	/**
	 * getNextPage
	 */
	public IWizardPage getNextPage() {
		CheckoutConfirmPage checkConfirmPage = (CheckoutConfirmPage) getWizard().getPage("CheckoutConfirmPage");
		checkConfirmPage.setStatus(status);
		checkConfirmPage.setPc2host(bPc2host);
		return super.getNextPage();
	}
}
