package kandata.launcher;

import java.io.*;
import java.net.URL;
import java.util.Properties;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.dnd.*;
import java.awt.datatransfer.*;

/** ドロップしたら、自動的にサイト情報を登録するクラス */
class SiteDropRegister implements DropTargetListener {

	private KandataLauncher launcher;
	SiteDropRegister(KandataLauncher launcher) {
		this.launcher = launcher;
	}
	// ドラッグされたものが入ってきた。
	public void dragEnter(DropTargetDragEvent e) {
		// 文字列なら受け付ける
		if ( e.isDataFlavorSupported(DataFlavor.stringFlavor) ) {
			e.acceptDrag(DnDConstants.ACTION_COPY_OR_MOVE);	// 受け入れる
		}
	}
	public void dragExit(DropTargetEvent e) {}
	public void dragOver(DropTargetDragEvent e) {}
	public void dropActionChanged(DropTargetDragEvent e) {}
	// ドロップされた。Transferableからデータを取得する。
	public void drop(DropTargetDropEvent e) {
		// 文字列以外なら受け付けない。
		if ( ! e.isDataFlavorSupported(DataFlavor.stringFlavor) ) return;
		try {
			e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
			Transferable t = e.getTransferable();
			String str = (String)t.getTransferData(DataFlavor.stringFlavor);
			System.out.println("drop 文字列:"+str);
			e.dropComplete(true);
			// URLからプロパティファイルを取得
			URL url = new URL(str);
			InputStream in = url.openStream();
			Properties prop = new Properties();
			prop.load(in);
			in.close();
			// プロパティからサイト情報を作成
			Site site = createSiteFromProperties(prop);
			if (site == null) return;
			// 選択されているカテゴリの末尾にサイトを登録
			launcher.addSite(site);
		}
		catch(Exception ex) {
			ex.printStackTrace();
			e.dropComplete(false);
			launcher.showMessageBox("サイト情報の取得に失敗しました", ex);
		}
    }
    /** プロパティからサイト情報を作成する. */
    Site createSiteFromProperties(Properties prop)
    					throws Exception {
		// 必要な情報を取得
		String name = prop.getProperty("Name");
		String desc = prop.getProperty("Desc");
		String url  = prop.getProperty("Url");
		String clientType = prop.getProperty("ClientType");
		String version = prop.getProperty("Version");
		String iconUrl = prop.getProperty("IconUrl");
		System.out.println("Name="+name);
		System.out.println("Desc="+desc);
		System.out.println("Url="+url);
		System.out.println("ClientType="+clientType);
		System.out.println("Version="+version);
		System.out.println("IconUrl="+iconUrl);
		if (name==null || url==null ) return null;
		// アイコンの画像をURLから取得。
		Image icon = null;
		if (iconUrl != null) {
			icon = Toolkit.getDefaultToolkit().createImage(new URL(iconUrl));
		}
		// アイコンがないときには、未登録用のアイコンにする。
		if (icon == null) {
			icon = Site.getUnregistedImage();
		}
		System.out.println("Icon="+icon);
		Site site = new Site(url, clientType, version, name, desc, icon);
		// アイコンのバイト配列と拡張子も取得する。
		byte[] byteArray = Utilities.getByteArray(new URL(iconUrl));
		String ext = iconUrl.substring(iconUrl.lastIndexOf('.'));
		System.out.println("ext="+ext);
		site.setIconEx(byteArray, ext);
		return site;
	}
}

/*
		// ドロップ可能にする
        new DropTarget(launcher, DnDConstants.ACTION_COPY_OR_MOVE, new DropRegister(launcher), true);
*/