package com.scribblegame;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.security.InvalidParameterException;
import java.util.UUID;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Bitmap.CompressFormat;
import android.net.Uri;
import android.net.Uri.Builder;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.provider.MediaStore.Images.Media;
import android.view.Display;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewStub;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class DrawImage extends Activity implements OnTouchListener {
 
 TextView textTargetUri;
 ImageView targetImage;
 Bitmap bitmap, alteredBitmap;
 Canvas canvas;
 Paint paint;
 Context context;
 Path path;
 int color;
 SharedPreferences shared;
 Editor editor;
 float upx, upy, downx, downy;
 static Thread captureThread;
 SendImage sendImageObj;
 private static String file = "/sdcard/screens/screenshot.png";
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.scribbleimageview);
       
       captureThread = new Thread(new captured());
	   captureThread.start();
	      
       Button buttonLoadImage = (Button)findViewById(R.id.loadimage);
       targetImage = (ImageView)findViewById(R.id.targetimage);
    
	   context = this;
	   shared = PreferenceManager.getDefaultSharedPreferences(context);
	   
	   buttonLoadImage.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent(Intent.ACTION_PICK,
      android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, 0);
   }});
	   
	   
	      
   }

   class captured implements Runnable {
 	  public void run() {
	    			// make sure the path to save screens exists
	    			File screensPath = new File("/sdcard/screens");
	    			FileOutputStream fos;
	    			screensPath.mkdirs();
	    			
	    		  	while(true) {
	    		  		String connectionStatus = shared.getString("ConnectionRequest","OK");
	    		  		Log.v("Status",connectionStatus);
	    		  		//if(connectionStatus.equals("STOP"))
	    		  			//captureThread.currentThread().suspend();
	    		  	//	View v = getWindow().getDecorView().getRootView();
	    		  		View v = getWindow().getDecorView();
	    		  		v.setDrawingCacheEnabled(true);
	    		  		Bitmap a = Bitmap.createBitmap(1024, 1024, Bitmap.Config.ARGB_8888);
	    		  		Bitmap b =Bitmap.createBitmap(v.getDrawingCache()); 
	    		 
//	    		  		Bitmap scaledBitmap = Bitmap.createBitmap(640, 920, Bitmap.Config.ARGB_8888); 
//	    		  		Canvas canvas = new  Canvas(scaledBitmap);
//	    		  		canvas.drawColor(Color.WHITE);
//	    		  	    Paint paint = new Paint(Paint.DITHER_FLAG);
//	    		  		Matrix matrix = new Matrix();
//	    		  		matrix.setScale(1.5f, 1.5f);
//	    		  		matrix.setTranslate(320-b.getWidth(),0);// 460-b.getHeight()
//	    		 		canvas.drawBitmap(b, matrix, paint);
	    		  		try {
	    					fos = new FileOutputStream(file);
	    				} catch (FileNotFoundException e) {
	    					throw new InvalidParameterException();
	    				}
	    				Log.v("file", "Image created"+file);
	    				b.compress(CompressFormat.PNG, 100, fos);
	       				try {
							fos.close();
							if(sendImageObj !=null)
								sendImageObj = null;
							sendImageObj = new SendImage();
							sendImageObj.SendImageFile();
							Thread.sleep(1000);
						} catch (IOException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						} catch (InterruptedException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	    		  	}
	    	 	  
 	  }
		
}
   
   
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  
  if (resultCode == RESULT_OK){
   //
   Uri imageFileUri = 	data.getData();
   Display currentDisplay = getWindowManager().getDefaultDisplay();
   float dw = currentDisplay.getWidth();
   float dh = currentDisplay.getHeight();
   
   try {
	  BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
	  bmpFactoryOptions.inJustDecodeBounds =true;
    int heightRatio = (int)Math.ceil(bmpFactoryOptions.outHeight/dh);
    int widthRatio = (int)Math.ceil(bmpFactoryOptions.outWidth/dw);
    
    if(heightRatio > 1 && widthRatio > 1) {
    	if(heightRatio > widthRatio) {
    		bmpFactoryOptions.inSampleSize = heightRatio;
    	}
    	else {
    		bmpFactoryOptions.inSampleSize = widthRatio;
    	}  	
    }
    
    bmpFactoryOptions.inJustDecodeBounds = false;
    
    bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri), null, bmpFactoryOptions);
 alteredBitmap = Bitmap.createBitmap(318, 320, bitmap.getConfig());
    //  alteredBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), bitmap.getConfig());
   // alteredBitmap = Bitmap.createBitmap(320, 200, Bitmap.Config.ARGB_8888);
    canvas = new Canvas(alteredBitmap);
    canvas.drawColor(Color.GRAY);
    paint = new Paint(Paint.DITHER_FLAG);
        
    Matrix matrix = new Matrix();
    if(bitmap.getWidth() < 318)
    matrix.setTranslate((159-(bitmap.getWidth()/2)),0);
//    	matrix.setTranslate((159-(bitmap.getWidth()/2)), (160-bitmap.getHeight()/2));
    if(bitmap.getHeight() < 320)
    	matrix.setTranslate(0, (160-(bitmap.getHeight()/2)));
//    	matrix.setTranslate(0, 160);
    matrix.setScale(.5f, .5f);
    canvas.drawBitmap(bitmap, matrix, paint);
    
    path = new Path();
 //   canvas.drawPath(path, paint);
     //  targetImage.setAdjustViewBounds(true);
   //   targetImage.setMaxHeight(bitmap.getHeight());
   //   targetImage.setMaxWidth(bitmap.getWidth());
   //   targetImage.setColorFilter(Color.CYAN);
     targetImage.setImageBitmap(alteredBitmap);
     targetImage.setOnTouchListener(this);
     
 
   } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
 
  }

 private float mX, mY;
 private static final float TOUCH_TOLERANCE = 4;

 private void touch_start(float x, float y) {
     path.reset();
     path.moveTo(x, y);
     mX = x;
     mY = y;
 }
 private void touch_move(float x, float y) {
     float dx = Math.abs(x - mX);
     float dy = Math.abs(y - mY);
     if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
         path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
         mX = x;
         mY = y;
     }
 }
 private void touch_up() {
     path.lineTo(mX, mY);
     // commit the path to our offscreen
     canvas.drawPath(path, paint);
     // kill this so we don't double draw
     path.reset();
 }
 
 public boolean onTouch(View v, MotionEvent evt) {
	 
	 int action = evt.getAction();
	 float x = evt.getX(), y = evt.getY();
	 int location[];
	 location = new int[2];
	 targetImage.getLocationInWindow(location);
	 Log.v("get loc", "x ==>"+location[0]+"y ==>"+location[1]);
	 Log.v("x", "x="+evt.getX()+"y="+evt.getY()+"width ="+bitmap.getWidth()+"height="+bitmap.getHeight());
     Log.v("time",evt.getDownTime()+"");

	 color = shared.getInt("COLOR",Color.BLACK);
	 paint.setColor(color);
	 paint.setStrokeWidth(shared.getInt("STROKEWIDTH",1));
	 switch(action) {

	 case MotionEvent.ACTION_DOWN:
		 downx = evt.getX();
		 downy = evt.getY();
		 canvas.drawPoint(downx, downy, paint);
		 targetImage.invalidate();
	//	 touch_start(x,y);
	 break;
	 
	 case MotionEvent.ACTION_MOVE:
	 upx = evt.getX();
	 upy = evt.getY();
	 canvas.drawPoint(upx, upy, paint);
//	 canvas.drawLine(downx, downy, upx, upy, paint);
//		 touch_move(x, y);
	//	 canvas.drawPath(path, paint);
	 targetImage.invalidate();
	 break;
	 case MotionEvent.ACTION_UP:
//	 upx = evt.getX();
//	 upy = evt.getY();
//	 canvas.drawLine(downx, downy, upx, upy, paint);
	//	 canvas.drawPath(path, paint);
	 targetImage.invalidate();
	 break;	 
	 case MotionEvent.ACTION_CANCEL:
		 
	 break;	 
	 }
	 
	 return true;
 }
public void run() {
	// TODO Auto-generated method stub
	
}
  



}
