package com.tt.droidplay;

import android.app.ActionBar;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

/**
 * The settings activity.
 * 
 * @author Tuomas Tikka
 */
public class SettingsActivity extends Activity {

    // app preferences
    private SharedPreferences prefs;
	
    // server port
    EditText serverPort;
    
    // image transition
    Spinner imageTransition;
    
    // handler
    private Handler handler = new Handler();
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.settings);
		
		// action bar icon as home link
		ActionBar actionBar = getActionBar();
		actionBar.setSubtitle("Settings");
		actionBar.setHomeButtonEnabled(true);
		actionBar.setDisplayUseLogoEnabled(false);
		actionBar.setDisplayHomeAsUpEnabled(true); 
		
		// preferences
		prefs = getSharedPreferences("DroidPlay", 0);
		
		// server port
		serverPort = (EditText) findViewById(R.id.server_port);
		
		// image transition
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.image_transition_item, R.id.transition, AirPlayUtils.getTransitionDescriptions());
		imageTransition = (Spinner) findViewById(R.id.image_transition);
		imageTransition.setAdapter(adapter);
		
		// load settings
		loadSettings();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
	    MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.settings_actions, menu);
	    return (true);
	} 
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	    case R.id.cancel: {
	    	finish();
			break;
	    }
	    case R.id.save: {
	    	saveSettings();
	    	toast("Saved settings");
	    	finish();
			break;
	    }
	    case android.R.id.home: {
	    	finish();
	    	break;
	    }
	    default:
	    	break;
	    }
	    return (true);
	} 	
	
	private void loadSettings() {
		// server port
		serverPort.setText("" + prefs.getInt("ServerPort", 9999));
		// image transition
		imageTransition.setSelection(prefs.getInt("ImageTransition", 0));
	}
	
	private void saveSettings() {
		// validate port number
		try {
			int i = Integer.parseInt(serverPort.getText().toString());
			if (i < 1024 || i > 65535) {
				Toast.makeText(this, "Server port: must be in range 1024-65535", Toast.LENGTH_SHORT).show();
				return;
			}
		} catch (Exception e) {
			Toast.makeText(this, "Server port: must be a number", Toast.LENGTH_SHORT).show();
			return;
		}
		// save
		Editor editor = prefs.edit();
		editor.putInt("ServerPort", Integer.parseInt(serverPort.getText().toString()));
		editor.putInt("ImageTransition", imageTransition.getSelectedItemPosition());
		editor.commit();
	}
	
	private void toast(final String message) {
		handler.post(new Runnable() {
			@Override
			public void run() {
				LayoutInflater inflater = getLayoutInflater();
				View layout = inflater.inflate(R.layout.toast, (ViewGroup) findViewById(R.id.toast_layout_root));
				TextView text = (TextView) layout.findViewById(R.id.text);
				text.setText(message);
				Toast toast = new Toast(getApplicationContext());
				toast.setDuration(Toast.LENGTH_SHORT);
				toast.setView(layout);
				toast.show();
			}
		});
	}
	
}