package org.aprsdroid.app

import android.app.Activity
import android.content._
import android.os.Bundle
import android.preference.PreferenceManager
import android.text.InputType
import android.util.Log
import android.widget.{EditText, Toast}

import java.io.File
import java.util.Scanner

import org.json._

import scala.collection.JavaConversions._ // for enumeration of config items

class ProfileImportActivity extends Activity {
	val TAG = "APRSdroid.ProfileImport"

	lazy val db = StorageDatabase.open(this)

	override def onCreate(savedInstanceState: Bundle) {
		super.onCreate(savedInstanceState)
		Log.d(TAG, "created: " + getIntent())
		import_config()
	}

	def import_config() {
		try {
			// parse stream into string, http://stackoverflow.com/a/5445161/539443
			val scanner = new Scanner(getContentResolver().openInputStream(getIntent.getData())).useDelimiter("\\A")
			val config_string = scanner.next()
			val config = new JSONObject(config_string)
			val prefsedit = PreferenceManager.getDefaultSharedPreferences(this).edit()

                        val keys = config.keys()
			while (keys.hasNext()) {
                                val item = keys.next().asInstanceOf[String]
				val value = config.get(item)
				Log.d(TAG, "reading: " + item + " = " + value + "/" + value.getClass())

                                // Hack: too complicated to figure out scala match rules for native types
				value.getClass().getSimpleName() match {
				case "String" => prefsedit.putString(item, config.getString(item))
				case "Boolean" => prefsedit.putBoolean(item, config.getBoolean(item))
				case "Int" | "Integer" => prefsedit.putInt(item, config.getInt(item))
				case "Double" => prefsedit.putFloat(item, config.getDouble(item).asInstanceOf[Float])
				}
			}
			prefsedit.commit()
			val msg = getString(R.string.profile_import_done, getIntent.getData().getPath())
			Toast.makeText(this, msg, Toast.LENGTH_SHORT).show()
			db.addPost(System.currentTimeMillis(), StorageDatabase.Post.TYPE_INFO,
				getString(R.string.profile_import_activity), msg)
			startActivity(new Intent(this, classOf[LogActivity]))
		} catch {
			case e : Exception =>
				val errmsg = getString(R.string.profile_import_error, e.getMessage())
				Toast.makeText(this, errmsg, Toast.LENGTH_LONG).show()
				db.addPost(System.currentTimeMillis(), StorageDatabase.Post.TYPE_ERROR,
					getString(R.string.profile_import_activity), errmsg)
				e.printStackTrace()
		}
		finish()
	}
}
