package jp.ac.kyutech.mns.ist.sheetmap;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.geom.Point2D;
import java.text.DecimalFormat;
import java.util.concurrent.ConcurrentLinkedQueue;

import javax.swing.JFrame;

import jp.ac.kyutech.mns.ist.SimpleATN;
import edu.umd.cs.piccolo.nodes.PPath;

/**
 * Microsoft Windowsのシェルで，ファイルをドラッグしてJavaのパネルにドロップしたときに，
 * ドロップされたファイルのパスを引き渡すためのインタフェース
 * 
 * @author miuramo
 *
 */

/**
 * IDMarkerPrinterCanvas
 * 
 * マーカーを印刷
 * 
 * 対応付けはどうするか？
 * 読み込み時に，範囲チェックし，該当したら
 * そのパネルに筆記を登録
 * 
 * 範囲チェック：はみ出た部分は表示しない（筆記としてはアリ，書き出し（または中央の点）のパネルに属する）
 * 
 * グループ化の認識：
 * 
 * グループ化解除の認識：テーブルで認識されたら，グループ化解除
 *
 *
 *Webで見る，アプリで見る
 *DBに接続，最終イメージ
 *
 *位置もDBから．
 *[ID, 場所, 時刻] でバージョン管理
 *
 *紙リソースが足りない
 *紙に書き込むときに，1000~ 2000~ 3000~ のベースを選択
 *一旦対応付けがされれば，あとは普通に混ぜても大丈夫（MarkerIDで処理できるので）
 *ただし，追記時には注意が必要
 *
 *１セット3枚で対応できるのは36枚まで．あとは紙とIDの対応を切り替える
 *
 *基本的に，常に連続読込状態．
 *システムで最初に筆記入力を開始するときに，
 *
 */

public class SheetPrinterCanvas extends MyPCanvas {

	private static final long serialVersionUID = -3976359681845338950L;

	PPath focusPath;
	PPath debugPath;
	
	Dimension printDimension = new Dimension(700,(int)(700*Math.sqrt(2.0)));
	Dimension displayDimension = new Dimension(500,(int)(500*Math.sqrt(2.0)));

	ConcurrentLinkedQueue<Point2D> locationPointArray;

	JFrame parent;

	public static DecimalFormat decimalformat4 = new DecimalFormat("0000"); 
	public static DecimalFormat decimalformat3 = new DecimalFormat("000"); 

	public void fit() {
		getCamera().animateViewToCenterBounds(focusPath.getBounds(), true, 1000);
	}
	public void fullFit() {
		getCamera().animateViewToCenterBounds(getLayer().getFullBounds(), true, 1000);
	}
	public Dimension getPreferredSize(){
		return displayDimension;
	}
	
	SimpleATN satn;

	public SheetPrinterCanvas(JFrame _parent, SimpleATN satn){
		parent = _parent;
		this.satn = satn;

		setBackground(Color.gray);

		focusPath = PPath.createRectangle(0, 0, printDimension.width, printDimension.height);
		focusPath.setStrokePaint(Color.LIGHT_GRAY); //枠線
		focusPath.setPaint(null);
//		getLayer().addChild(focusPath); 黒く表示されるのがいや

//		PCamera c = new PCamera();
//		c.addLayer(sheet.getLayer());
//		c.setBounds(focusPath.getFullBoundsReference());
//		c.setViewBounds(sheet.getLayer().getFullBoundsReference());
//		c.setPaint(Color.white);
//		getLayer().addChild(c);
//		getLayer().addChild(focusPath);

		//debug path
		debugPath = PPath.createRectangle(0, 0, printDimension.width, printDimension.height);
		debugPath.setStrokePaint(Color.blue);
		debugPath.setStroke(new BasicStroke(50));
		debugPath.setPaint(null);
		debugPath.setTransparency(0.7f);
		getLayer().addChild(debugPath);
		debugPath.setVisible(false);
		
//		setDefaultRenderQuality(0); // TODO:
	}

	public JFrame getFrame() {
		return parent;
	}
	
	public void updateFocusPath(ATNProperty prop){
		
		double t = prop.printmargin_top;
		double b = prop.printmargin_bottom;
		double l = prop.printmargin_left;
		double r = prop.printmargin_right;
		
		double paperwidthmm = 210;
		double paperheightmm = 297;
		
		double innerwidthmm = paperwidthmm - l - r;
		double innerheightmm = paperheightmm - t - b;
		
		double bw = 700.0 * innerwidthmm / paperwidthmm;
		double bh = 990.0 * innerheightmm / paperheightmm;
		
		double by = 990.0 * t /paperheightmm;
		double bx = 700.0 * l /paperwidthmm;
		
		focusPath.setPathToRectangle((float)bx,(float)by, (float)bw,(float)bh);
		
		debugPath.setPathToRectangle((float)bx,(float)by, (float)bw,(float)bh);
		
	}
}

