package com.example.wordbook.task;

import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.util.Log;
import android.util.TimingLogger;

import com.example.wordbook.common.Common;
import com.example.wordbook.common.Message;
import com.example.wordbook.provider.WBData;
import com.example.wordbook.provider.WBHelper;
import com.example.wordbook.provider.WBProvider;

/**
 * 単語帳DB問題集削除タスク
 */
public class AsyncTaskDelete extends AsyncTaskBase {

	/** TAG */
	private static final String TAG = AsyncTaskDelete.class.getSimpleName();

	/**
	 * コンストラクタ
	 * 
	 * @param activity
	 *            アクティビティ
	 * @param horizontal
	 *            水平進捗バー表示設定
	 */
	public AsyncTaskDelete(Activity activity, boolean horizontal) {
		super(activity, horizontal);
	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see android.os.AsyncTask#onPreExecute()
	 */
	@Override
	protected void onPreExecute() {
		super.onPreExecute();
		Log.d(TAG, "onPreExecute()");
	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see android.os.AsyncTask#onPostExecute(java.lang.Object)
	 */
	@Override
	protected void onPostExecute(Integer result) {

		// 処理成功
		if (result > 0) {
			// 表示更新
			if (mActivity instanceof OnAsyncTaskFinished) {
				((OnAsyncTaskFinished) mActivity).onAsyncTaskFinished();
			}
			// 成功通知
			Message.show(mActivity, Message.ID.DELETE_COMPLETE);
		} else {
			// 失敗通知
			Message.show(mActivity, Message.ID.DELETE_FAILED);
		}

		Log.d(TAG, "onPostExecute()=" + result);
		super.onPostExecute(result);
	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see android.os.AsyncTask#doInBackground(Params[])
	 */
	@Override
	protected Integer doInBackground(String... params) {
		Log.d(TAG, "doInBackground()");
		int result = 0;

		// パラメータ取得
		String data = "";
		if (params == null || params.length == 0) {
			return result;
		}
		data = params[0];

		// インデックス取得
		List<Map<String, Object>> list = Common.getWordbookPrefList(mActivity
				.getApplicationContext());
		int index = 0;
		for (Map<String, Object> item : list) {
			if (item.get(Common.WORDBOOK_TITLE).equals(data)) {
				index = (Integer) item.get(Common.WORDBOOK_INDEX);
				break;
			}
		}
		if (index == 0) {
			return result;
		}

		// Indexの問題集削除
		final int DB_MODE = 1;
		TimingLogger logger = new TimingLogger("dbg", "Delete()");

		// 対象設定
		String selection = WBData.InfoColumns.INFO_FILE + "=?";
		String[] selectionArgs = { Integer.toString(index) };

		switch (DB_MODE) {
		case 0:
			// by ContentProvider
			ContentResolver cr = mActivity.getContentResolver();
			Uri uri = WBProvider.INFO_CONTENT_URI;
			result = cr.delete(uri, selection, selectionArgs);
			logger.addSplit("ContentProvider");
			break;
		default:
			// by SQLiteOpenHelper
			WBHelper helper = WBHelper.getInstance(mActivity);
			SQLiteDatabase db = helper.getWritableDatabase();
			result = db
					.delete(WBData.TABLE_NAME_INFO, selection, selectionArgs);
			db.close();
			helper.close();
			logger.addSplit("SQLiteOpenHelper");
			break;
		}

		if (result > 0) {
			// 設定ファイル更新
			Common.delWordbookPref(mActivity.getApplicationContext(), index);
		}

		// 処理時間計測
		logger.dumpToLog();

		return result;
	}

}