package com.example.wordbook;

import java.util.List;

import android.content.Context;
import android.text.Html;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.example.wordbook.common.Common;
import com.example.wordbook.common.Data;

/**
 * 一覧画面用アダプタ
 */
public class WBListAdapter extends ArrayAdapter<Data> {

	/** CompoundDrawable */
	private int mImage;

	/** LayoutInflater */
	private LayoutInflater mInflater;

	/**
	 * ViewHolder
	 */
	private static class ViewHolder {
		TextView level;
		TextView question;
		TextView answer;
		TextView title;
		ImageView divider;
	}

	/**
	 * コンストラクタ
	 * 
	 * @param context
	 *            コンテキスト
	 * @param textViewResourceId
	 *            リソースID
	 * @param objects
	 *            アイテム
	 */
	public WBListAdapter(Context context, int textViewResourceId,
			List<Data> objects) {
		super(context, textViewResourceId, objects);

		mInflater = LayoutInflater.from(context);

		// アイコン設定
		switch (Common.getComm(context)) {
		case 0:
			mImage = R.drawable.icon_flag;
			break;
		case 1:
			mImage = R.drawable.icon_edit;
			break;
		case 2:
			mImage = R.drawable.icon_sound;
			break;
		case 3:
			mImage = R.drawable.icon_link;
			break;
		default:
			mImage = android.R.drawable.ic_delete;
			break;
		}
	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see android.widget.Adapter#getView(int, android.view.View,
	 * android.view.ViewGroup)
	 */
	@Override
	public View getView(final int position, View convertView,
			final ViewGroup parent) {
		// View設定
		ViewHolder holder;
		View view = convertView;
		if (view == null) {
			view = mInflater.inflate(R.layout.list_wblist, parent, false);
			holder = new ViewHolder();
			holder.level = (TextView) view.findViewById(R.id.textViewLevel);
			holder.question = (TextView) view
					.findViewById(R.id.textViewQuestion);
			holder.answer = (TextView) view.findViewById(R.id.textViewAnswer);
			holder.title = (TextView) view.findViewById(R.id.textViewTitle);
			holder.divider = (ImageView) view.findViewById(R.id.divider);
			view.setTag(holder);
		} else {
			holder = (ViewHolder) view.getTag();
		}

		// アイテム取得
		Data data = getItem(position);

		// 検索結果画面で使用するタイトル用レイアウトと共用
		if (data.num == 0) {
			// タイトル用レイアウト
			holder.level.setVisibility(View.GONE);
			holder.question.setVisibility(View.GONE);
			holder.answer.setVisibility(View.GONE);
			holder.title.setVisibility(View.VISIBLE);
			holder.divider.setVisibility(View.GONE);

			// 文字列設定
			holder.title.setText(data.question);
		} else {
			// アイテム用レイアウト
			holder.level.setVisibility(View.VISIBLE);
			holder.question.setVisibility(View.VISIBLE);
			holder.answer.setVisibility(View.VISIBLE);
			holder.title.setVisibility(View.GONE);
			holder.divider.setVisibility(View.VISIBLE);

			// 背景色設定
			Common.setBackgroundColor(view, data.flag);

			// レベル用TextView設定
			holder.level.setText("Lv." + data.level);
			holder.level.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0,
					mImage);

			// 質問欄設定
			String q = data.question;
			if (data.data1.length() > 0) {
				/* TODO 発音記号追加 */
				q += " / <small>" + data.data1 + "</small>";
			}
			CharSequence cs = Html.fromHtml(q);

			// 文字列設定
			switch (data.stat & Data.STAT_SHOW) {
			case Data.STAT_QUESTION:
				holder.question.setText(cs);
				holder.answer.setText("");
				break;
			case Data.STAT_ANSWER:
				holder.question.setText("");
				holder.answer.setText(data.answer);
				break;
			case Data.STAT_SHOW:
				holder.question.setText(cs);
				holder.answer.setText(data.answer);
				break;
			default:
				holder.question.setText("");
				holder.answer.setText("");
				break;
			}

			// アダプタからロングクリックイベントを送信できないためIDで識別
			// クリック用イベントリスナ設定
			holder.level.setOnClickListener(new View.OnClickListener() {
				@Override
				public void onClick(View v) {
					((ListView) parent).performItemClick(v, position,
							Common.ITEM_CLICK);
				}
			});
			// ロングクリック用イベントリスナ設定
			holder.level.setOnLongClickListener(new View.OnLongClickListener() {
				@Override
				public boolean onLongClick(View v) {
					((ListView) parent).performItemClick(v, position,
							Common.ITEM_LONG_CLICK);
					return true;
				}
			});
		}

		return view;
	}

}
