package com.plugin.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.plugin.util.PaCursorUtils;
import com.plugin.util.PaLog;

/**
 * Plugin sqlite helper
 * Created by LIUYONGKUI on 2015-12-02.
 */
public class PluginSQLiteHelper extends SQLiteOpenHelper {

	/** table name */
	private static final String TABLE_NAME = "pahf_plugintable";
	/** suffix */
	private static final String SUFFIX = "=?";

	/**
	 * constructor
	 *
	 * @param aContext context
	 */
	public PluginSQLiteHelper(Context aContext) {
		super(aContext, PluginDatabaseManager.DB_NAME, null, PluginDatabaseManager.DB_VERSION);
	}

	@Override
	public void onCreate(SQLiteDatabase db) {
		createTable(db);
	}

	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        PaLog.d("PluginDB", "oldversion: " + oldVersion + " new version: " + newVersion);

	}

	/**
	 * 增
	 * 
	 * @param db db
	 * @param values values
	 * @return result
	 */
	public static long insert(SQLiteDatabase db, ContentValues values) {
		if (db == null) {
			PaLog.e("PluginDB is null");
			return -1;
		}
		try {
			long ret = db.replace(TABLE_NAME, null, values);
			return ret;
		} catch (Exception e) {
			e.printStackTrace();
			return -1;
		}
	}

	/**
	 * 删
	 * 
	 * @param db db
	 * @param selectionArgs args
	 * @return result
	 */
	public static int delete(SQLiteDatabase db, String[] selectionArgs) {
        try {
            return db.delete(TABLE_NAME, PluginDatabaseManager.Columns.PLUGIN_ID + SUFFIX, selectionArgs);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
	}

	/**
	 * 删全部
	 *
	 * @param db db
	 * @return result
	 */
	public static int deleteAll(SQLiteDatabase db) {
		try {
			return db.delete(TABLE_NAME, null, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return 0;
	}

	/**
	 * 改
	 * 
	 * @param db db
	 * @param values values
	 * @param selectionArgs args
	 * @return result
	 */
	public static long update(SQLiteDatabase db, ContentValues values, String[] selectionArgs) {
        try {
            return db.replace(TABLE_NAME, null,values);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return -1;
	}

	/**
	 * 查
	 * 
	 * @param db db
	 * @param columns colums
	 * @param selectionArgs args
	 * @param groupBy groupby
	 * @param having having
	 * @param orderBy orderby
	 * @return cursor
	 */
	public static Cursor query(SQLiteDatabase db, String[] columns, String[] selectionArgs, String groupBy,
			String having, String orderBy) {
		PaCursor cursor = null;
		try {
			cursor = PaCursorUtils.getCursor(db.query(TABLE_NAME, columns, null,
					selectionArgs, groupBy, having, orderBy));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cursor;
	}

	/**
	 * create table
	 * 
	 * @param db db
	 */
	private void createTable(SQLiteDatabase db) {
		try {
			String cmd = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " ( "
					+ PluginDatabaseManager.Columns.PLUGIN_ID + " TEXT PRIMARY KEY NOT NULL,"
					+ PluginDatabaseManager.Columns.URL + " TEXT NOT NULL,"
					+ PluginDatabaseManager.Columns.PACKAGE_NAME + " TEXT NOT NULL,"
					+ PluginDatabaseManager.Columns.PLUGIN_NAME + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.INSTALL_PATH + " TEXT NOT NULL,"
					+ PluginDatabaseManager.Columns.VERSION + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.TYPE + " INTEGER DEFAULT 0,"
					+ PluginDatabaseManager.Columns.STATUS + " INTEGER DEFAULT 1, "
					+ PluginDatabaseManager.Columns.APK_MAINACTIVITY + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.DESCRIPTION + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.APP_ICON + " BLOB,"
					+ PluginDatabaseManager.Columns.IS_STANDALONE + " INTEGER DEFAULT 0,"
					+ PluginDatabaseManager.Columns.IS_ENABLED + " INTEGER DEFAULT 0,"
					+ PluginDatabaseManager.Columns.APPLICATION_NAME + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.APPLICATION_LOGO + " INTEGER DEFAULT 0,"
					+ PluginDatabaseManager.Columns.APPLICATION_ICON + " INTEGER DEFAULT 0,"
					+ PluginDatabaseManager.Columns.APPLICATION_THEME + " INTEGER DEFAULT 0,"
                    + PluginDatabaseManager.Columns.ACTIVITY_INFOS + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.ACTIVITYS + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.SERVICES + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.PROVIDER_INFOS + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.FRAGMENTS + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.METADATA + " TEXT DEFAULT '',"
					+ PluginDatabaseManager.Columns.RECEIVERS + " TEXT DEFAULT ''"
                    + " ) ";
			db.execSQL(cmd);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}