package com.sara.facebookappl;

import java.io.IOException;
import java.net.MalformedURLException;


import org.json.JSONException;
import org.json.JSONObject;


import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Looper;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
import com.facebook.android.Util;

public class MainActivity extends Activity implements OnClickListener, DialogListener {
    
	Facebook fb; 
	ImageView button; 
	private SharedPreferences sp; 
	TextView welcome; 
	Button post; 
	
	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		post=(Button)findViewById(R.id.button1);
		
		String APP_ID = getString(R.string.APP_ID);
		fb= new Facebook(APP_ID);
		
		Looper.prepare(); 
		new PostTask().execute(fb);
		Looper.loop(); 
		
		sp =getPreferences(MODE_PRIVATE);
		String access_token=sp.getString("access_token", null);
		long expires=sp.getLong("access_expires", 0);
		
		if (access_token !=null) {
			fb.setAccessToken(access_token);
		}
		if(expires !=0) {
			fb.setAccessExpires(expires);
		}
			
		 
		button=(ImageView)findViewById(R.id.login);
		button.setOnClickListener((OnClickListener) this);
		updateButtonImage();
		
	}
	
	private class PostTask extends AsyncTask<Facebook, Integer, String> {
		
		ProgressDialog dialog; 
		
		protected void onPreExecute() {
			dialog = new ProgressDialog(MainActivity.this);
			dialog.setProgress(ProgressDialog.STYLE_HORIZONTAL);
			dialog.setMax(100);
			dialog.show();
			
			
		}

		@SuppressWarnings("deprecation")
		@Override
		protected String doInBackground(Facebook... params) {
			if (fb.isSessionValid()) {
				button.setImageResource(R.drawable.com_facebook_loginbutton_blue);
				// ^logout button
			
			JSONObject obj=null;
			
			try {
			String jsonUser= fb.request("me");
			obj = Util.parseJson(jsonUser);
			String name = obj.optString("name");
			welcome.setText("Welcome, " + name);
			}catch(FacebookError e) {
				e.printStackTrace();

			}catch (JSONException e) {
				e.printStackTrace();
			}catch (MalformedURLException e) {
				e.printStackTrace();
			}catch (IOException e) {
				e.printStackTrace();
			}
			
			}else {
				post.setVisibility(Button.VISIBLE);
				button.setImageResource(R.drawable.com_facebook_loginbutton_blue);
			}
			return null;
		}
	}
	
	protected void onProgressUpdated(Integer...progress) {
		
	}
	
	@SuppressWarnings("deprecation")
	protected void onPostExecute(Facebook result) {

			// ^logout button
		try {JSONObject obj=null;
		String jsonUser= fb.request("me");
		obj = Util.parseJson(jsonUser);
		String name = obj.optString("name");
		welcome.setText("Welcome, " + name);}
		catch(FacebookError e) {
			e.printStackTrace();

		}catch (JSONException e) {
			e.printStackTrace();
		}catch (MalformedURLException e) {
			e.printStackTrace();
		}catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	private void updateButtonImage() {
		// TODO Auto-generated method stub
		
		post.setVisibility(Button.VISIBLE);
		button.setImageResource(R.drawable.com_facebook_loginbutton_blue);
		//logout button
		
		
	}
	
	@SuppressWarnings("deprecation")
	public void buttonClicks(View v) {
		switch (v.getId()) {
			case R.id.button1:
				//post
				
				Bundle params= new Bundle();
				
				params.putString("name", "User X"); 
				params.putString("caption", "Rating"); 
				params.putString("description", "User X Rated"); 
				params.putString("link", "http://..."); 
				
				
				
				fb.dialog(MainActivity.this, "feed", params, new Facebook.DialogListener() {
					
					@Override
					public void onFacebookError(FacebookError e) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onError(DialogError e) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onComplete(Bundle values) {
						// TODO Auto-generated method stub
						
					}
					
					@Override
					public void onCancel() {
						// TODO Auto-generated method stub
						
					}
				});
				break;
		}
	}
	@SuppressWarnings("deprecation")
	public void onClick(View v) {
		if(fb.isSessionValid()) {
			
			try {
			fb.logout(getApplicationContext());
			updateButtonImage();
			//button will close our our session
		}catch(MalformedURLException e) {
			e.printStackTrace();
		} catch(IOException e) {
			e.printStackTrace();
		}
	}else{
			//login into facebook
			fb.authorize(MainActivity.this, new String[] {"email"}, new Facebook.DialogListener() {
				
				@Override
				public void onFacebookError(FacebookError e) {
					// TODO Auto-generated method stub
					Toast.makeText(MainActivity.this, "fbError", Toast.LENGTH_SHORT).show();
				}
				
				@Override
				public void onError(DialogError e) {
					// TODO Auto-generated method stub
					Toast.makeText(MainActivity.this, "onError", Toast.LENGTH_SHORT).show();
				}
				
				@Override
				public void onComplete(Bundle values) {
					// TODO Auto-generated method stub
					Editor editor=sp.edit();
					editor.putString("access_token", fb.getAccessToken());
					editor.putLong("access_expires", fb.getAccessExpires());
					editor.commit();
					updateButtonImage();
				}
				
				@Override
				public void onCancel() {
					// TODO Auto-generated method stub
					Toast.makeText(MainActivity.this, "onCancel", Toast.LENGTH_SHORT).show();
				}
			});
			
			}
	}
	

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	
	@SuppressWarnings("deprecation")
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		fb.authorizeCallback(requestCode, resultCode, data);
	}

	@Override
	public void onComplete(Bundle values) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onFacebookError(FacebookError e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onError(DialogError e) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void onCancel() {
		// TODO Auto-generated method stub
		
	}

}