package com.lloydm.geosword.activities;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
//import android.content.res.Resources;
//import android.graphics.Bitmap;
//import android.graphics.BitmapFactory;
//import android.graphics.Canvas;
//import android.graphics.Matrix;
//import android.graphics.Paint;
//import android.graphics.Rect;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
//import android.view.SurfaceHolder;
//import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
//import android.widget.FrameLayout;
import android.widget.TextView;

import com.lloydm.geosword1.R;
import com.lloydm.geosword.common.StandardGameMenuActivity;
import com.lloydm.geosword.common.UploadCompleteBroadcastReceiver;
import com.lloydm.geosword.common.UploadService;

public class Map3DActivity extends StandardGameMenuActivity// implements SurfaceHolder.Callback
{
     private final static String TAG = "com.lloydm.geosword.activities.Map3DActivity";

     private int teamid = -1;

     private volatile boolean goingback = true;
     // private volatile boolean waiting = false;

     private Button btnback = null;
     private Button btnattack = null;

     private String replayfile = "";

     private TextView txtprogress = null;

     // private SurfaceView skirmishmap = null;
     // private Bitmap skirmishbmp = null;
     // private Canvas skirmishcanvas = null;
     // private SurfaceHolder skirmishholder = null;
     // private volatile boolean skirmishready = false;
     // private FrameLayout flay = null;

     // owners of planets.....any change will show explosions.....yay.....pretty simple interface.....
     // private String planetteams = "1234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345";
     // private String oplanetteams = "1234512345123451234512345123451234512345123451234512345123451234512345123451234512345123451234512345";

     // private int[] oparray = new int[5];
     // private int[] parray = new int[5];

     private UploadCompleteBroadcastReceiver loadreceiver = null;
     private UploadCompleteBroadcastReceiver updatereceiver = null;
     private UploadCompleteBroadcastReceiver simprogressreceiver = null;

     @Override
     protected void onCreate(Bundle savedInstanceState)
     {
                     super.onCreate(savedInstanceState);
                     /*
                         * j3dmap = new J3DMap(assetmgr); j3dmap.init3D(this); try { if (j3dmap.glview != null) { j3dmap.glview.setZOrderOnTop(true); } } catch (Exception ee) { Log.i(TAG, "Error z ordering 3d"); }
                         */
     }

     @SuppressLint("InlinedApi")
     @Override
     public void setup()
     {
                     setContentView(R.layout.activity_map3d);
                     mainview = (View) findViewById(R.layout.activity_map3d);
                     teamid = getIntent().getIntExtra("com.lloydm.geosword.common.UploadService.teamid", -1);
                     /*
                         * flay = (FrameLayout) findViewById(R.id.flayglmap); if(Build.VERSION.SDK_INT>=16) { flay.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
                         * View.SYSTEM_UI_FLAG_LAYOUT_STABLE)
; }
                         *
                         * skirmishmap = (SurfaceView) findViewById(R.id.surfskirmishmap); skirmishholder = skirmishmap.getHolder(); skirmishholder.addCallback(this);
                         *
                         *
                         * planetteams = getprefs("com.lloydm.geosword.activities.Map3DActivity.planets",oplanetteams);
                         *
/
                     btnback = (Button) findViewById(R.id.btnbackmap);
                     btnback.setTypeface(font);
                     btnback.setOnClickListener(new View.OnClickListener()
                     {

                                     @Override
                                     public void onClick(View v)
                                     {
                                                     goingback = true;
                                                     finish();
                                     }
                     })
;
                     txtprogress = (TextView) findViewById(R.id.txtsimprog3d);
                     txtprogress.setTypeface(font);
                     btnattack = (Button) findViewById(R.id.btnlaunchskirmish);
                     btnattack.setTypeface(font);
                     btnattack.setOnClickListener(new View.OnClickListener()
                     {
                                     @Override
                                     public void onClick(View v)
                                     {
                                                     // launch an attack against a random player....
                                                     // this will be local too.....
                                                     Intent serviceintent = new Intent(Map3DActivity.this, UploadService.class);
                                                     if (Build.VERSION.SDK_INT >= 12)
                                                     {
                                                                     serviceintent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
                                                     }
                                                     serviceintent.setAction("com.lloydm.geosword.common.UploadService.map3d.update");

                                                     serviceintent.putExtra("com.lloydm.geosword.common.UploadService.worldattack.teamid", teamid);
                                                     serviceintent.putExtra("com.lloydm.geosword.common.UploadService.uniqueid", uid);
                                                     startService(serviceintent);
                                                     runOnUiThread(new Runnable()
                                                     {
                                                                     @Override
                                                                     public void run()
                                                                     {
                                                                                     btnattack.setEnabled(false);
                                                                                     txtprogress.bringToFront();
                                                                                     try
                                                                                     {
                                                                                                     txtprogress.invalidate();
                                                                                                     txtprogress.getParent().requestLayout();
                                                                                     }
                                                                                     catch (Exception e)
                                                                                     {

                                                                                     }
                                                                     }
                                                     })
;

                                     }
                     });

                     /*
                         * try { j3dmap.glview.setAlpha(1.0f); } catch (Exception e) { Log.e(TAG, "error setting glview alpha"); }
                         *
/
                     setreceiver();
                     requestlist();

     }

     @Override
     protected void onResume()
     {
                     super.onResume();
                     /*
                         * if (j3dmap != null) { j3dmap.Resume(); }
                         *
/
                     setreceiver();
                     requestlist();
                     // setuphelp(R.string.htt_map3d,R.string.htxt_map3d,R.string.htt_map3d);
     }

     @Override
     protected void onPause()
     {
                     super.onPause();
                     /*
                         * if (j3dmap != null) { j3dmap.Pause(); }
                         *
/
                     if (loadreceiver != null)
                     {
                                     unregisterReceiver(loadreceiver);
                     }
                     loadreceiver = null;
                     if (updatereceiver != null)
                     {
                                     unregisterReceiver(updatereceiver);
                     }
                     updatereceiver = null;
                     if (simprogressreceiver != null)
                     {
                                     unregisterReceiver(simprogressreceiver);
                     }
                     simprogressreceiver = null;

                     if (isFinishing())
                     {
                                     if (goingback)
                                     {
                                                     onChangeActivity(0);
                                     }
                     }
     }

     @Override
     public void onChangeActivity(int id)
     {
                     super.onChangeActivity(id);
                     if (id == 0)
                     {
                                     goingback = false;
                                     startActivity(new Intent(this, InspectFleetActivity.class).putExtra("com.lloydm.geosword.common.UploadService.teamid", teamid).putExtra("com.lloydm.geosword.activities.PreGameLobbyActivity.worldcampaign", true));
                                     finish();
                     }
                     if (id == 13)
                     {
                                     goingback = false;
                                     // start test activity - we're going to fight a battle!
                                     startActivity(new Intent(this, TestActivity.class).putExtra("com.lloydm.geosword.activities.TestActivity.replayfile", replayfile));
                                     finish();
                     }
     }

     private void setreceiver()
     {
                     if (simprogressreceiver == null)
                     {
                                     simprogressreceiver = new UploadCompleteBroadcastReceiver()
                                     {
                                                     @Override
                                                     public void onReceive(Context context, Intent intent)
                                                     {
                                                                     final float simprog = intent.getFloatExtra("com.lloydm.geosword.activities.LaunchAttackActivity.simprogvalue", 0) * 100f;
                                                                     // do something with this.....even if it is just logging it...
                                                                     Log.i(TAG, "Sim progress:" + simprog);

                                                                     runOnUiThread(new Runnable()
                                                                     {

                                                                                     @Override
                                                                                     public void run()
                                                                                     {
                                                                                                     try
                                                                                                     {
                                                                                                                     Log.i(TAG, "skirmishprogress:" + simprog);

                                                                                                                     int prg = (int) simprog;
                                                                                                                     String strsp = Integer.toString(prg);
                                                                                                                     String status = "Preparing for Battle";
                                                                                                                     if (prg < 20)
                                                                                                                     {
                                                                                                                                     status = "Preparing for Warp Jump " + strsp + "%";
                                                                                                                     }
                                                                                                                     if (prg >= 20 && prg < 30)
                                                                                                                     {
                                                                                                                                     status = "Entering System " + strsp + "%";
                                                                                                                     }
                                                                                                                     if (prg >= 30 && prg < 50)
                                                                                                                     {
                                                                                                                                     status = "Arming Weapons And Shields " + strsp + "%";
                                                                                                                     }
                                                                                                                     if (prg >= 50 && prg < 85)
                                                                                                                     {
                                                                                                                                     status = "Checking Comms " + strsp + "%";
                                                                                                                     }
                                                                                                                     if (prg >= 85 && prg < 95)
                                                                                                                     {
                                                                                                                                     status = "Engaging " + strsp + "%";
                                                                                                                     }
                                                                                                                     if (prg >= 95)
                                                                                                                     {
                                                                                                                                     status = "Visual Contact Established " + strsp + "%";
                                                                                                                     }
                                                                                                                     txtprogress.setText(status);
                                                                                                                     txtprogress.setVisibility(View.VISIBLE);
                                                                                                     }
                                                                                                     catch (Exception e)
                                                                                                     {
                                                                                                                     Log.e(TAG, "error converting simprog to string");
                                                                                                     }
                                                                                     }
                                                                     });
                                                     }
                                     };
                                     registerReceiver(simprogressreceiver, new IntentFilter("com.lloydm.geosword.activities.LaunchAttackActivity.simprogress"));
                     }
                     /*
                         * if (loadreceiver == null) { loadreceiver = new UploadCompleteBroadcastReceiver() {
                         *
                         * @Override public void onReceive(Context context, Intent intent) { //populate planets etc..... boolean success =
                         * intent.getBooleanExtra("com.lloydm.geosword.activities.Map3DActivity.resultcode", false); long tuid = intent.getLongExtra("com.lloydm.geosword.common.UploadService.uniqueid", -1);
                         * if(tuid!=uid) { //ignore this one and try again..... Log.i(TAG,"uid does not match"); success = false; } if(success) { oplanetteams = planetteams; final String pp =
                         * intent.getStringExtra("com.lloydm.geosword.activities.Map3DActivity.planets"); if(pp!=null) { planetteams = pp; } saveprefs("com.lloydm.geosword.activities.Map3DActivity.planets",
                         * planetteams)
; goingback = true; waiting = false; for(int i=0;i<5;i++) { parray[i] = 0; oparray[i] = 0; } for(int i=0;i<planetteams.length();i++) { try { final int pn =
                         * Integer.decode(planetteams.substring(i, i+1)); if(pn>0 && pn<6) { parray[pn-1]++; } } catch(Exception e) {
                         *
                         * } } for(int i=0;i<oplanetteams.length();i++) { try { final int pn = Integer.decode(oplanetteams.substring(i, i+1)); if(pn>0 && pn<6) { oparray[pn-1]++; } } catch(Exception e) {
                         *
                         * } } //count the number of each..... //draw the bitmap.... Resources res = getResources(); Bitmap p1 = BitmapFactory.decodeResource(res, R.drawable.p1); Bitmap p2 =
                         * BitmapFactory.decodeResource(res, R.drawable.p2); Bitmap p3 = BitmapFactory.decodeResource(res, R.drawable.p3); Bitmap p4 = BitmapFactory.decodeResource(res, R.drawable.p4); Bitmap p5 =
                         * BitmapFactory.decodeResource(res, R.drawable.p5); Bitmap r1 = BitmapFactory.decodeResource(res,R.drawable.red_pt_b); Bitmap r2 = BitmapFactory.decodeResource(res,R.drawable.blue_pt_b);
                         * Bitmap r3 = BitmapFactory.decodeResource(res,R.drawable.yellow_pt_b); Bitmap r4 = BitmapFactory.decodeResource(res,R.drawable.green_pt_b); Bitmap r5 =
                         * BitmapFactory.decodeResource(res,R.drawable.purple_pt_b); Bitmap bk = BitmapFactory.decodeResource(res,R.drawable.mapbk1); Paint paint = new Paint(); Matrix matrix = new Matrix();
                         * if(skirmishbmp==null && skirmishready==true) { skirmishbmp = Bitmap.createBitmap(skirmishmap.getWidth(), skirmishmap.getHeight(), Bitmap.Config.ARGB_8888); } if(skirmishready) {
                         * if(skirmishbmp!=null) { if(skirmishcanvas==null) { skirmishcanvas = new Canvas(); } skirmishcanvas.setBitmap(skirmishbmp); Rect dst3 = new Rect(); dst3.left = 0; dst3.top = 0; dst3.bottom =
                         * skirmishmap.getHeight(); dst3.right = skirmishmap.getWidth(); skirmishcanvas.drawBitmap(bk, null, dst3, paint); int k = 0; float angle1 = 0; float angle2 = 0; float r =
                         * skirmishmap.getWidth()/60; final float origr = r; float dr = r * 2.5f; for(int i=0;i<5;i++) { for(int j=0;j<parray[i];j++) {
                         *
                         * k++; angle2+=0.08f; r+=dr; if((k%5)==0) { angle1+=3.14159f/21f; r = origr; } float xx = (skirmishmap.getWidth()/2) + r * (float)Math.cos(angle1+angle2); float yy =
                         * (skirmishmap.getHeight()/2) + r * (float)Math.sin(angle1+angle2); Rect src = new Rect(); src.left = 0; src.top = 0; src.bottom = p1.getHeight(); src.right = p1.getWidth(); Rect dst = new
                         * Rect(); dst.left = (int)(xx - 24f); dst.right = (int)(xx + 24f); dst.top = (int)(yy - 24f); dst.bottom = (int)(yy + 24f); Rect dst2 = new Rect(); dst2.left = dst.left - 8; dst2.right =
                         * dst.right + 8; dst2.top = dst.top - 8; dst2.bottom = dst.bottom + 8; Bitmap ppb = null; Bitmap ppr = null; if((j%5)==0) { ppb = p1; } if((j%5)==1) { ppb = p2; }
                         *
                         * if((j%5)==2) { ppb = p3; }
                         *
                         * if((j%5)==3) { ppb = p4; }
                         *
                         * if((j%5)==4) { ppb = p5; } if(i==0) { ppr = r1; } if(i==1) { ppr = r2; } if(i==2) { ppr = r3; } if(i==3) { ppr = r4; } if(i==4) { ppr = r5; } if(ppb!=null) { skirmishcanvas.drawBitmap(ppb,
                         * null, dst, paint)
; } if(ppr!=null) { skirmishcanvas.drawBitmap(ppr, null, dst2,paint); } } } try { Canvas canvas = skirmishholder.lockCanvas(); if(canvas!=null) {
                         * canvas.drawBitmap(skirmishbmp, matrix, paint); } skirmishholder.unlockCanvasAndPost(canvas); } catch(Exception e) { Log.w(TAG,"error writing to canvas/skirmish map"); } } } } } };
                         * registerReceiver(loadreceiver, new IntentFilter("com.lloydm.geosword.activities.Map3DActivity.load")); }
                         *
/
                     if (updatereceiver == null)
                     {
                                     updatereceiver = new UploadCompleteBroadcastReceiver()
                                     {
                                                     @Override
                                                     public void onReceive(Context context, Intent intent)
                                                     {
                                                                     // start battle
                                                                     boolean success = intent.getBooleanExtra("com.lloydm.geosword.activities.Map3DActivity.resultcode", false);
                                                                     long tuid = intent.getLongExtra("com.lloydm.geosword.common.UploadService.uniqueid", -1);
                                                                     if (tuid != uid)
                                                                     {
                                                                                     // ignore this one and try again.....
                                                                                     Log.i(TAG, "uid does not match");
                                                                                     success = false;
                                                                     }
                                                                     if (success)
                                                                     {
                                                                                     replayfile = intent.getStringExtra("com.lloydm.geosword.activities.Map3DActivity.battlefile");
                                                                                     runOnUiThread(new Runnable()
                                                                                     {
                                                                                                     @Override
                                                                                                     public void run()
                                                                                                     {
                                                                                                                     // for now.....
                                                                                                                     if (!replayfile.equals(""))

                                                                                                                     {
                                                                                                                                     goingback = false;
                                                                                                                                     // waiting = false;
                                                                                                                                     onChangeActivity(13);
                                                                                                                     }
                                                                                                                     else
                                                                                                                     {
                                                                                                                                     newtoast("Battle file error");
                                                                                                                                     goingback = true;
                                                                                                                                     // waiting = false;
                                                                                                                     }
                                                                                                     }
                                                                                     });
                                                                     }
                                                                     else
                                                                     {
                                                                                     goingback = true;
                                                                                     // waiting = false;
                                                                     }
                                                     }
                                     };
                                     registerReceiver(updatereceiver, new IntentFilter("com.lloydm.geosword.activities.Map3DActivity.update"));
                     }
     }

     @SuppressLint("InlinedApi")
     private void requestlist()
     {
                     /*
                         * if (waiting) { newtoast("Please wait....trying to talk to database"); return; } waiting = true; Intent serviceintent = new Intent(Map3DActivity.this, UploadService.class); if
                         * (Build.VERSION.SDK_INT >= 12) { serviceintent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); } serviceintent.setAction("com.lloydm.geosword.common.UploadService.map3d.load");
                         * serviceintent.putExtra("com.lloydm.geosword.common.UploadService.uniqueid", uid); startService(serviceintent);
                         *
/
     }
     /*
         * @Override public void surfaceCreated(SurfaceHolder holder) { Log.i(TAG,"surf created"); skirmishready = true; drawbackground(); }
         *
         * @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.i(TAG,"surf changed"); skirmishready = true; drawbackground(); }
         *
         * @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.i(TAG,"surf destroyed"); skirmishready = false;
         *
         * } private void drawbackground() { for(int i=0;i<oplanetteams.length();i++) { try { final int pn = Integer.decode(oplanetteams.substring(i, i+1)); if(pn>0 && pn<6) { oparray[pn-1]++; } }
         * catch(Exception e) {
         *
         * } } //count the number of each..... //draw the bitmap.... Resources res = getResources(); Bitmap p1 = BitmapFactory.decodeResource(res, R.drawable.p1); Bitmap p2 =
         * BitmapFactory.decodeResource(res, R.drawable.p2); Bitmap p3 = BitmapFactory.decodeResource(res, R.drawable.p3); Bitmap p4 = BitmapFactory.decodeResource(res, R.drawable.p4); Bitmap p5 =
         * BitmapFactory.decodeResource(res, R.drawable.p5); Bitmap r1 = BitmapFactory.decodeResource(res,R.drawable.red_pt_b); Bitmap r2 = BitmapFactory.decodeResource(res,R.drawable.blue_pt_b); Bitmap
         * r3 = BitmapFactory.decodeResource(res,R.drawable.yellow_pt_b); Bitmap r4 = BitmapFactory.decodeResource(res,R.drawable.green_pt_b); Bitmap r5 =
         * BitmapFactory.decodeResource(res,R.drawable.purple_pt_b); Bitmap bk = BitmapFactory.decodeResource(res, R.drawable.mapbk1); Paint paint = new Paint(); Matrix matrix = new Matrix();
         * if(skirmishbmp==null && skirmishready==true) { skirmishbmp = Bitmap.createBitmap(skirmishmap.getWidth(), skirmishmap.getHeight(), Bitmap.Config.ARGB_8888); } if(skirmishready) {
         * if(skirmishbmp!=null) { if(skirmishcanvas==null) { skirmishcanvas = new Canvas(); } skirmishcanvas.setBitmap(skirmishbmp); Rect dst3 = new Rect(); dst3.left = 0; dst3.top = 0; dst3.bottom =
         * skirmishmap.getHeight(); dst3.right = skirmishmap.getWidth(); skirmishcanvas.drawBitmap(bk, null, dst3, paint); int k = 0; float angle1 = 0; float angle2 = 0; float r =
         * skirmishmap.getWidth()/60; final float origr = r; float dr = r * 2.5f; for(int i=0;i<5;i++) { for(int j=0;j<oparray[i];j++) {
         *
         * k++; angle2+=0.08f; r+=dr; if((k%5)==0) { angle1+=3.14159f/21f; r = origr; } float xx = (skirmishmap.getWidth()/2) + r * (float)Math.cos(angle1+angle2); float yy = (skirmishmap.getHeight()/2) +
         * r * (float)Math.sin(angle1+angle2); Rect src = new Rect(); src.left = 0; src.top = 0; src.bottom = p1.getHeight(); src.right = p1.getWidth(); Rect dst = new Rect(); dst.left = (int)(xx - 24f);
         * dst.right = (int)(xx + 24f); dst.top = (int)(yy - 24f); dst.bottom = (int)(yy + 24f); Rect dst2 = new Rect(); dst2.left = dst.left - 8; dst2.right = dst.right + 8; dst2.top = dst.top - 8;
         * dst2.bottom = dst.bottom + 8; Bitmap ppb = null; Bitmap ppr = null; if((j%5)==0) { ppb = p1; } if((j%5)==1) { ppb = p2; }
         *
         * if((j%5)==2) { ppb = p3; }
         *
         * if((j%5)==3) { ppb = p4; }
         *
         * if((j%5)==4) { ppb = p5; } if(i==0) { ppr = r1; } if(i==1) { ppr = r2; } if(i==2) { ppr = r3; } if(i==3) { ppr = r4; } if(i==4) { ppr = r5; } if(ppb!=null) { skirmishcanvas.drawBitmap(ppb,
         * null, dst, paint)
; } if(ppr!=null) { skirmishcanvas.drawBitmap(ppr, null, dst2,paint); } } } try { Canvas canvas = skirmishholder.lockCanvas(); if(canvas!=null) { canvas.drawBitmap(skirmishbmp,
         * matrix, paint)
; } skirmishholder.unlockCanvasAndPost(canvas); } catch(Exception e) { Log.w(TAG,"error writing to canvas/skirmish map"); } } } }
         *
/
}