/**
 * Copyright (C) 2009 Michael A. MacDonald
 */
package android.androidVNC;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

/**
 * @author Michael A. MacDonald
 *
 */
class VncDatabase extends SQLiteOpenHelper {
	static final int DBV_0_2_X = 9;
	static final int DBV_0_2_4 = 10;
	static final int DBV_0_4_7 = 11;
	static final int DBV_0_5_0 = 12;
	static final int DBV_0_6_0 = 13;
	
	public final static String TAG = VncDatabase.class.toString();
	
	VncDatabase(Context context)
	{
		super(context,"VncDatabase",null,DBV_0_6_0);
	}

	/* (non-Javadoc)
	 * @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		db.execSQL(AbstractConnectionBean.GEN_CREATE);
		db.execSQL(MostRecentBean.GEN_CREATE);
		db.execSQL(MetaList.GEN_CREATE);
		db.execSQL(AbstractMetaKeyBean.GEN_CREATE);
		db.execSQL(SentTextBean.GEN_CREATE);
		
		db.execSQL("INSERT INTO "+MetaList.GEN_TABLE_NAME+" VALUES ( 1, 'DEFAULT')");
	}
	
	private void defaultUpgrade(SQLiteDatabase db)
	{
		Log.i(TAG, "Doing default database upgrade (drop and create tables)");
		db.execSQL("DROP TABLE IF EXISTS " + AbstractConnectionBean.GEN_TABLE_NAME);
		db.execSQL("DROP TABLE IF EXISTS " + MostRecentBean.GEN_TABLE_NAME);
		db.execSQL("DROP TABLE IF EXISTS " + MetaList.GEN_TABLE_NAME);
		db.execSQL("DROP TABLE IF EXISTS " + AbstractMetaKeyBean.GEN_TABLE_NAME);
		db.execSQL("DROP TABLE IF EXISTS " + SentTextBean.GEN_TABLE_NAME);
		onCreate(db);		
	}

	/* (non-Javadoc)
	 * @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		if (oldVersion < DBV_0_2_X)
		{
			defaultUpgrade(db);
		}
		else {
			if (oldVersion == DBV_0_2_X)
			{
				Log.i(TAG, "Doing upgrade from 9 to 10");
				db.execSQL("ALTER TABLE " + AbstractConnectionBean.GEN_TABLE_NAME + " RENAME TO OLD_" +
						AbstractConnectionBean.GEN_TABLE_NAME);
				db.execSQL(AbstractConnectionBean.GEN_CREATE);
				db.execSQL("INSERT INTO " + AbstractConnectionBean.GEN_TABLE_NAME +
						" SELECT *, 0 FROM OLD_" + AbstractConnectionBean.GEN_TABLE_NAME);
				db.execSQL("DROP TABLE OLD_" + AbstractConnectionBean.GEN_TABLE_NAME);
				oldVersion = DBV_0_2_4;
			}
			if (oldVersion == DBV_0_2_4)
			{
				Log.i(TAG,"Doing upgrade from 10 to 11");
				db.execSQL("ALTER TABLE " + AbstractConnectionBean.GEN_TABLE_NAME + " ADD COLUMN " +AbstractConnectionBean.GEN_FIELD_USERNAME+" TEXT");
				db.execSQL("ALTER TABLE " + AbstractConnectionBean.GEN_TABLE_NAME + " ADD COLUMN " +AbstractConnectionBean.GEN_FIELD_SECURECONNECTIONTYPE+" TEXT");
				db.execSQL("ALTER TABLE " + MostRecentBean.GEN_TABLE_NAME + " ADD COLUMN " + MostRecentBean.GEN_FIELD_SHOW_SPLASH_VERSION + " INTEGER");
				db.execSQL("ALTER TABLE " + MostRecentBean.GEN_TABLE_NAME + " ADD COLUMN " + MostRecentBean.GEN_FIELD_TEXT_INDEX);
				oldVersion = DBV_0_4_7;
			}
			if (oldVersion == DBV_0_4_7)
			{
				Log.i(TAG,"Doing upgrade from 11 to 12");
				// Haven't been using SentText before, primary key handling changed so drop and recreate it
				db.execSQL("DROP TABLE IF EXISTS " + SentTextBean.GEN_TABLE_NAME);
				db.execSQL(SentTextBean.GEN_CREATE);
				db.execSQL("ALTER TABLE " + AbstractConnectionBean.GEN_TABLE_NAME + " ADD COLUMN " +AbstractConnectionBean.GEN_FIELD_SHOWZOOMBUTTONS+" INTEGER DEFAULT 1");
				db.execSQL("ALTER TABLE " + AbstractConnectionBean.GEN_TABLE_NAME + " ADD COLUMN " +AbstractConnectionBean.GEN_FIELD_DOUBLE_TAP_ACTION+" TEXT");
				oldVersion = DBV_0_5_0;
			}
			Log.i(TAG, "Doing upgrade from 12 to 13");
			db.execSQL("ALTER TABLE "+AbstractConnectionBean.GEN_TABLE_NAME+" ADD COLUMN "+AbstractConnectionBean.GEN_FIELD_USEIMMERSIVE+" INTEGER DEFAULT 1");
			db.execSQL("ALTER TABLE "+AbstractConnectionBean.GEN_TABLE_NAME+" ADD COLUMN "+AbstractConnectionBean.GEN_FIELD_USEWAKELOCK+" INTEGER");
		}
	}

}
