//package psicho;

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import java.awt.event.*;
//import util.my;

public class Nekeris  extends JPanel implements
	ActionListener{
public int L=51, R=17, M=2,
	phi=45;
public static int maxCount = 31;
public int ox=50, oy=50;
public JTextField
	tPV=new JTextField("PavardeV",13),
	tL=new JTextField(""+L,3),
	tR=new JTextField(""+R,3),
	tM=new JTextField(""+M,3),
	tPhi=new JTextField(""+phi,3),
	tOx=new JTextField(""+ox,3), tOy=new JTextField(""+oy,3);
public JCheckBox tKv=new JCheckBox("Sulaikant kvepavima");

public JButton piesk = new JButton("<html><b>Piesk</b></html>");

public void init(){
 piesk.addActionListener(new ActionListener(){
	 public void actionPerformed(ActionEvent e){
		 repaint();
	 }
 });
 add(tPV);
 add(piesk);
 add(new JLabel(" M ")); add(tM);
 add(new JLabel(" L ")); add(tL);
 add(new JLabel(" R ")); add(tR);
 add(new JLabel("<html>phi</html>")); add(tPhi);
 add(new JLabel("<html><sup>o</sup></html>"));
 add(tKv);
 //add(new JLabel(" ox[%] ")); add(tOx);
 //add(new JLabel(" oy[%] ")); add(tOy);
 setVisible(true);
}

public void actionPerformed(ActionEvent e){
}

public void paint(Graphics g){
	super.paint(g);
	Color[] c=new Color[]{
		new Color(0,0,0),new Color(100,0,0),new Color(100,0,0)};
	Color c_=new Color(50,50,0);
	c[0]=c[1]=c[2]=c_;
	L=Integer.parseInt(tL.getText());
	R=Integer.parseInt(tR.getText());
	M=Integer.parseInt(tM.getText());
	phi=-Integer.parseInt(tPhi.getText());
	int L2=L/2;
	int Ox=L*Integer.parseInt(tOx.getText())/100,
		Oy=L*Integer.parseInt(tOx.getText())/100;
	int x0, y0, x1, y1;
	int[] x=new int[M], y=new int[M];

	int xs=getWidth()/2, ys=getHeight()/2;
	double f0,f1, q=phi/180.0*Math.PI;
	for (int m=0; m<M; m++){
		g.setColor(c[m%c.length]);
		f0=m*2*Math.PI/M+q;
		f1=((m+1)%M)*2*Math.PI/M+q;
		x0=xs-(int)(R*Math.cos(f0))-L2;
		y0=ys-(int)(R*Math.sin(f0))-L2;
		x1=xs-(int)(R*Math.cos(f1))-L2;
		y1=ys-(int)(R*Math.sin(f1))-L2;
		drawRect(g,x0,y0,L,L);
		for (int i=0; i<2; i++)
			for (int j=0; j<2; j++)
				drawLine(g,x0+i*L,y0+j*L,x1+i*L,y1+j*L);
	}
	g.setColor(Color.black);
	g.setFont(new Font(g.getFont().getFontName(),Font.BOLD,12));
	g.drawString("Mouse left - priekyje kairesnis",
		getWidth()/2-80,getHeight()-50);
	g.drawString("Mouse right - priekyje desinesnis",
		getWidth()/2-80,getHeight()-30);
/*
	g.setColor(c);
	for (int i=0; i<2; i++)
		for (int j=0; j<2; j++) if ((i+j)%2==0)
			drawLine(g,xs+i*L,ys+j*L,xs+Ox1+i*L,ys+Oy1+j*L);
			else drawLine(g,xs+i*L,ys+j*L,xs+Ox2+i*L,ys+Oy2+j*L);
	for (int i=0; i<2; i++)
		for (int j=0; j<2; j++) if ((i+j)%2==1)
			drawLine(g,xs+i*L,ys+j*L,xs+Ox1+i*L,ys+Oy1+j*L);
			else drawLine(g,xs+i*L,ys+j*L,xs+Ox2+i*L,ys+Oy2+j*L);
*/

}
public void drawRect(Graphics g, int x, int y, int w, int h){
	for (int i=-1; i<2; i++){
		g.drawRect(x+i,y+i,w-2*i,h-2*i);
	}
}
public void drawLine(Graphics g, int x1, int y1, int x2, int y2){
	int[]	ix=new int[]{0,1,0,-1,0},
			iy=new int[]{0,0,1,0,-1};
	int N=ix.length;
//	N=1;
	for (int i=0; i<N; i++)
		g.drawLine(x1+ix[i],y1+iy[i],x2+ix[i],y2+iy[i]);
}


public static void main(String[] arg){
 JFrame f=new JFrame("Nekeris");
 Nekeris n=new Nekeris();
 MyMouse mm = new MyMouse(f,n);
 f.addMouseListener(mm);
 n.init();
 f.getContentPane().add(n);
// new MouseEvent(f,0,0,0,40,40,1,false);
 f.setBounds(30,30,800,600);
 f.setVisible(true);
/*
 try{
	while (true){
		int s=System.in.read();
		System.out.println(new String(new byte[]{(byte)s}));
	}
 }
 catch(IOException err){System.exit(0);};
*/
}
}

class MyMouse extends MouseAdapter{
int countButtonLeft=0,
	countButtonRight=0,
	prevButton=-1,
	maxCount=Nekeris.maxCount,	maxCount1=maxCount-1,
	count=0;
String[][] laikai = new String[maxCount][2];
long prevTime=-1;
double E=0, D=0;
JFrame f=null;
Nekeris nek=null;
public MyMouse(JFrame f,Nekeris nek){
	super();
	this.f = f;
	this.nek = nek;
}
public synchronized void mousePressed(MouseEvent e){
	super.mousePressed(e);
	if (Math.max(countButtonLeft,countButtonRight)==maxCount)
		return;
	int currButton=e.getButton();
	if (currButton==prevButton) return;
	long currTime = System.currentTimeMillis();
	if (prevButton>=0){
		long t=(currTime-prevTime);
		E+=t; D+=t*t;
		count++;
		String laikas=""+t;
		if (currButton==1)
			laikai[countButtonLeft++][0]=laikas;
			else laikai[countButtonRight++][1]=laikas;
//		my.p(currButton+" "+());
	}
	prevTime=currTime;
	prevButton=currButton;
	f.setTitle("Nekeris. #left="+countButtonLeft+
		" #right="+countButtonRight);
	if (Math.max(countButtonLeft,countButtonRight)==maxCount){
		E/=count; D=D/count-E*E;
		java.util.Date data = new java.util.Date();
		String date=data.toString(),
			pv=nek.tPV.getText();
		String eol="\r\n", rez="Kaire\tDesine\t[mSek]\t"+
			date+"\t"+E+"\t"+Math.sqrt(D)+"\t"+
			E*E/D+"\t"+D/E+"\t"+pv+eol;
		rez+=nek.tL.getText()+"\t"+nek.tR.getText()+"\t"+nek.tM.getText()+
			"\t"+nek.tPhi.getText()+"\t"+nek.tKv.isSelected()+eol;

		for (int i=0;i<maxCount1;i++)
			rez+=laikai[i][0]+"\t"+laikai[i][1]+eol;
		System.out.println(rez);
		my.saveToFile(pv+"_"+data.getYear()+"_"+data.getMonth()+"_"+
			data.getDay()+"_"+data.getHours()+"_"+data.getMinutes(),rez);
		System.exit(0);
	}
//	my.p(""+e.getButton());

}
}