package com.ftinc.si.assist.test.js;

import java.util.HashMap;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JMenuItem;

import com.ftinc.si.assist.test.ArgumentIF;
import com.ftinc.si.assist.test.AssertIF;
import com.ftinc.si.assist.test.TestCaseIF;
import com.ftinc.si.assist.test.TestCommandIF;
import com.ftinc.si.assist.test.Tool;
import com.ftinc.si.assist.test.gui.Plugin;
import com.ftinc.si.assist.test.gui.SimpleTextEditor;

public class JSDriverPlugin implements Plugin {

	@Override
	public JMenuItem getMenuItem(String cmd) {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

	@Override
	public int getPriority(TestCaseIF cs, TestCommandIF rec, String stack) {
		// TODO 自動生成されたメソッド・スタブ
		return 0;
	}

	@Override
	public int initCommand(TestCommandIF args) {
		// TODO 自動生成されたメソッド・スタブ
		return 0;
	}

	@Override
	public void initArguments(ArgumentIF[] a) {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public void initArgument(ArgumentIF a, String opt) {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public int varArgsPos() {
		// TODO 自動生成されたメソッド・スタブ
		return 0;
	}

	@Override
	public boolean hasSubject() {
		// TODO 自動生成されたメソッド・スタブ
		return false;
	}

	@Override
	public boolean hasAssert() {
		// TODO 自動生成されたメソッド・スタブ
		return false;
	}

	@Override
	public void editArgument(ArgumentIF a, AssertIF ast, String opt) {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public TestCommandIF extendCommand(TestCommandIF a) {
		// TODO 自動生成されたメソッド・スタブ
		return null;
	}

	@Override
	public void initAssert(AssertIF ast) {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public void editAssert(AssertIF ast, TestCommandIF a) {
		// TODO 自動生成されたメソッド・スタブ

	}

	@Override
	public void editProperties(HashMap<String, String> map) {
		String t_src = ""; //$NON-NLS-1$
		for(Entry<String, String> entry : map.entrySet()) {
			if (t_src.length() > 0) {
				t_src += "\n"; //$NON-NLS-1$
			}
			t_src += entry.getKey() + "=" + entry.getValue(); //$NON-NLS-1$
		}
		SimpleTextEditor t_editor = new SimpleTextEditor(null, t_src, true);//trueはモーダル
		t_editor.setVisible(true);

		final Pattern t_pat = Pattern.compile("^([^=]+)=(.+)$"); //$NON-NLS-1$
		Matcher t_m;
		String t_result = t_editor.getText();
		if (t_result != null) {
			String[] t_array = t_result.split("\n", -1); //$NON-NLS-1$
			map.clear();
			for (int i = 0; i < t_array.length; i++) {
				t_m = t_pat.matcher(t_array[i]);
				if (t_m.find()) {
					map.put(t_m.group(1).trim(), t_m.group(2).trim());
				}
			}
		}
	}

	//このプラグインの設定をシステムプロパティに書き込む。Driverのパスなどである。
	@Override
	public void initProperties(HashMap<String, String> map) {
		for(Entry<String, String> entry : map.entrySet()) {
			String t_key = entry.getKey();
			String t_val = entry.getValue();

			//約束の短縮パスを展開する。
			if (t_val.startsWith("$LIBDIR")) {
				String t_path = t_val;
				String t_opt = "";
				if (t_path.matches("^([^,]*?)(\\\\,.*)$")) {
					t_path = t_val.replaceFirst("^([^,]*?)(\\\\,.*)$", "$1");
					t_opt = t_val.replaceFirst("^([^,]*?)(\\\\,.*)$", "$2");
				}
				t_val = Tool._libfile(t_path).getAbsolutePath() + t_opt;
			}

			System.setProperty(t_key, t_val);
		}
	}


	//Browserのの終了処理。使用時のみ動くようにstaticで実装済み。
	@Override
	public void destroy() {
		JSTester.quit();
	}

}
