package science.itaintrocket.pomfshare;

import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.FileNotFoundException;

public class MainActivity extends Activity {
	private final String tag = "ayy lmao";
	private String result;
	private Button copyButton;
	private Uri imageUri;
	private static final int CHOOSE_HOST = 1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		Intent i = new Intent(this, HostListActivity.class);
		startActivityForResult(i, CHOOSE_HOST);

		copyButton = (Button) findViewById(R.id.copyButton);
		Intent intent = getIntent();
		imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
	}

	private void displayAndUpload(Host host) {
		ContentResolver cr = getContentResolver();
		if (imageUri != null) {
			ImageView view = (ImageView)findViewById(R.id.sharedImageView);
			view.setImageURI(imageUri);

			ParcelFileDescriptor inputPFD = null; 
			try {
				inputPFD = cr.openFileDescriptor(imageUri, "r");				
			} catch (FileNotFoundException e) {
				Log.e(tag, e.getMessage());
				Toast toast = Toast.makeText(getApplicationContext(), "Unable to read file.", Toast.LENGTH_SHORT);
				toast.show();				
			}

			new Uploader(this, inputPFD, host).execute(imageUri.getLastPathSegment(), cr.getType(imageUri));
		}
	}
	
	public void finishUpload(String resultUrl) {
		EditText output = (EditText) findViewById(R.id.outputField);
		output.setText(resultUrl);
		// set for clipboard
		result = resultUrl;
		copyButton.setEnabled(true);
		copyButton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				copyToClipboard();
			}
		});
	}

	@TargetApi(Build.VERSION_CODES.HONEYCOMB)
	private void copyToClipboard() {
		if (result == null)
			return;
		ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
		ClipData clip = ClipData.newPlainText("Upload url", result);
		clipboard.setPrimaryClip(clip);
		Toast t = Toast.makeText(getApplicationContext(), "Copied", Toast.LENGTH_SHORT);
		t.show();
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (requestCode == CHOOSE_HOST && resultCode == RESULT_OK) {
			Host chosen = new Host(data.getBundleExtra("Host"));
			Log.d(tag, "Chose " + chosen.getName());
			displayAndUpload(chosen);
		} else {
			// User cancels
			Log.d(tag, "Canceled");
			finish();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}