package com.android.caij.xutilsdemo.fragment;

import java.util.Date;
import java.util.List;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.android.caij.xutilsdemo.R;
import com.android.caij.xutilsdemo.domain.Student;
import com.lidroid.xutils.DbUtils;
import com.lidroid.xutils.ViewUtils;
import com.lidroid.xutils.db.sqlite.Selector;
import com.lidroid.xutils.db.sqlite.WhereBuilder;
import com.lidroid.xutils.exception.DbException;
import com.lidroid.xutils.view.annotation.ViewInject;
import com.lidroid.xutils.view.annotation.event.OnClick;

public class DbFragment extends Fragment {

	@ViewInject(R.id.db_add)
	private Button db_add;
	@ViewInject(R.id.db_find)
	private Button db_find;
	@ViewInject(R.id.db_update)
	private Button db_update;
	@ViewInject(R.id.db_delete)
	private Button db_delete;

	@ViewInject(R.id.tv_info)
	private TextView info;
	private DbUtils db;

	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.db_fragment_view, container,
				false);
		ViewUtils.inject(this, view);

		db = DbUtils.create(this.getActivity());
		// 创建方式有多个重载, 实际项目中可能选择这个 因为数据库升级,后期数据维护都用的到
		// DbUtils.create(context, dbDir, dbName, dbVersion, dbUpgradeListener)
		db.configDebug(true); // debug模式 会输入sql语句
		db.configAllowTransaction(true); // 允许事务
		return view;
	}

	@OnClick(R.id.db_add)
	public void add(View view) {
		try {
			Student student = new Student();
			student.setName("张三");
			student.setId(10086);
			student.setAge(18);
			student.setMan(true);
			student.setTime(new Date());
			student.setDate(new java.sql.Date(new Date().getTime()));
			db.save(student);

			student = new Student();
			student.setName("李四");
			student.setId(10010);
			student.setAge(15);
			student.setMan(true);
			student.setTime(new Date());
			student.setDate(new java.sql.Date(new Date().getTime()));
			db.save(student);

			student = new Student();
			student.setName("小红");
			student.setId(10000);
			student.setAge(15);
			student.setMan(false);
			student.setTime(new Date());
			student.setDate(new java.sql.Date(new Date().getTime()));
			db.save(student);
			Toast.makeText(this.getActivity(), "添加成功", Toast.LENGTH_SHORT).show();
		} catch (DbException e) {
			e.printStackTrace();
		}
	}

	@OnClick(R.id.db_find)
	public void find(View view) {
		try {
			String temp = "";
			// 查找全部
			// List<Student> students = db.findAll(Student.class);
			// for (Student student : students) {
			// temp = temp + student.toString() + "\n";
			// }

			// 主键查找
			// Student student = db.findById(Student.class, 10086);
			// temp = student.toString();

			//条件查找
			List<Student> students = db.findAll(Selector.from(Student.class)
					.where("name", "=", "李四")
					.where(WhereBuilder.b("id", "=", 10010)).orderBy("name").limit(0).offset(10));
			if (students == null) {
				Toast.makeText(this.getActivity(), "没有数据请先添加数据", Toast.LENGTH_SHORT).show();
				return;
			}
			for (Student student : students) {
				temp = temp + student.toString() + "\n";
			}
			info.setText(temp);
		} catch (DbException e) {
			e.printStackTrace();
		}
	}
	
	//下面两个暂时不实现, 看时间。其实也类似。 
	@OnClick(R.id.db_update)
	public void update(View view) {
		
	}
	
	@OnClick(R.id.db_delete)
	public void delete(View view) {
		
	}
}