package cn.net.caoyao.cpzshandset.db;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class YthDBHelper extends SQLiteOpenHelper {
	/**
	 * VERSION = 1:初始建表结构
	 * 
	 * VERSION = 2:在订单表(invoice)表中，增加 package_id 字段
	 */
	private static final int VERSION = 1;// 提交状态增加一个生产功能

	/**
	 * 数据库名字
	 */
	public final static String db_name = "ythHandset.db";

	/**
	 * 发运单
	 */
	public static final String tb_invoice = "invoice";
	/**
	 * 车站管理表
	 */
	public static final String tb_station_manager = "stationManager";
	/**
	 * 火车车站管理表
	 */
	public static final String tb_train_station_manager="trainStation";
	/**
	 * 客户信息表
	 */
	public static final String tb_train_client_info="trainClientInfo";
	
	/**
	 * 火车发货单
	 */
	public static final String tb_train_invoice = "trainInvoice";
	/**
	 * 汽车发货单
	 */
	public static final String tb_truck_invoice = "truckInvoice";
	/**
	 * 产品信息表
	 */
	public static final String tb_product_info = "productInfo";

	/**
	 * 激活信息表
	 */
	public static final String tb_activate_info = "activateInfo";
	/**
	 * 单标操作表
	 */
	public static final String tb_single_label_option = "singleLabelOption";
	/**
	 * 批量标签操作表
	 */
	public static final String tb_batch_label_option = "batchLabelOption";
	/**
	 * 产品的点击次数表
	 */
	public static final String tb_product_choice_count="productChoiceCount";

	public YthDBHelper(Context context) {
		super(context, db_name, null, VERSION);
//		Log.d("--==", "--==数据1");
	}

	@Override
	public void onCreate(SQLiteDatabase db) {

		createStationManager(db);
		createInvoice(db);
		createTrainInvoice(db);
		createTruckInvoice(db);
		createProductInfo(db);
		createProductChoiceCount(db);
		createActivateInfo(db);
		createSingleLabelOption(db);
		createBatchLabelOption(db);
		createTrainStationManager(db);
		createTrainClientInfo(db);
//		createTest(db);
		
	}
	



	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
	}
	
	/**
	 * 检测数据库中是否存在某一列
	 * @param db
	 * @param tableName
	 * @param primaryKeyName
	 * @param columnName
	 * @return true:存在    false:不存在
	 */
	private boolean checkColumnExists(SQLiteDatabase db,String tableName, String primaryKeyName,String columnName){
		boolean b = true;
		String sql = "SELECT * from " + tableName +" where "+primaryKeyName+"=0";
		Cursor cursor = db.rawQuery(sql, null);
		int columnIndex = cursor.getColumnIndex(columnName);
		cursor.close();
		if (columnIndex < 0) {
			b = false;
		}
		return b;
	}
	/**
	 * id：主键
	 * consignee：收货人
	 * regionid：销售区域id
	 * regionName：销售区域名称
	 * consigneePY
	 * regionNamePY
	 * @param db
	 */
	private void createTrainClientInfo(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_train_client_info +" (id INTEGER PRIMARY KEY, consignee VARCHAR(20),regionid VARCHAR(20),regionName VARCHAR(20),createTime VARCHAR(20),updateTime VARCHAR(20),consigneePY VARCHAR(20), regionNamePY VARCHAR(20))";
		db.execSQL(sql);
		
	}
	/**
	 * id：主键
	 * province：省
	 * city：市
	 * county：区
	 * station：站名
	 * provinceCode：省简介
	 * stationPY
	 * provinceCodePY
	 * @param db
	 */
	private void createTrainStationManager(SQLiteDatabase db) {
		String sql = "CREATE TABLE "+ tb_train_station_manager+" (id INTEGER PRIMARY KEY,province VARCHAR(20),city VARCHAR(20),county VARCHAR(20),station VARCHAR(20),provinceCode VARCHAR(20),createTime VARCHAR(20),updateTime VARCHAR(20),stationPY VARCHAR(20),provinceCodePY VARCHAR(20))";
		db.execSQL(sql);
		
	}
	/**
	 * id:主键
	 * truckno:车牌号
	 * drivername:司机名称
	 * driverphone:司机电话
	 * orderno:订单号
	 * startingstation:始发站
	 * terminalstation:终点站
	 * consigneeId:收货人id
	 * timestamp:时间戳
	 * status;//0:未提交  1:提交失败
	 * labelMode:订单添加标签的模式 +1：加法操作     -1：减法操作
	 * error_code:服务器返回的错误码
	 * createDate：创建时间
	 * @param db
	 */
	private void createTruckInvoice(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_truck_invoice + " (id INTEGER PRIMARY KEY,truckno VARCHAR(20),drivername VARCHAR(20), driverphone VARCHAR(20),orderno VARCHAR(20),startingstation INTEGER,terminalstation INTEGER,consigneeId INTEGER,timestamp VARCHAR(20),labelMode INTEGER,status INTEGER default 0, expand1 VARCHAR(20),expand2 VARCHAR(20),error_code INTEGER,createDate DATE DEFAULT (date('now','localtime')))";
		db.execSQL(sql);
	}

	/**
	 * id:主键
	 * carriageno:车皮号 P打头后面跟七位数字的字符串
	 * startingstation:始发站  目前只有水富站
	 * terminalstation:终点站
	 * consigneeId:收货人信息id
	 * orderno:订单号
	 * timestamp:时间戳
	 * status:  0:有效   0:无效
	 * labelMode:订单添加标签的模式 0：加法操作     1：减法操作
	 * error_code:服务器返回的错误码
	 * createDate：创建时间
	 * @param db
	 */
	private void createTrainInvoice(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_train_invoice + " (id INTEGER PRIMARY KEY AUTOINCREMENT,carriageno VARCHAR(20),startingstation INTEGER,terminalstation INTEGER,consigneeId INTEGER, orderno VARCHAR(20),timestamp VARCHAR(20),labelMode INTEGER,status INTEGER default 0, expand1 VARCHAR(20),expand2 VARCHAR(20),error_code INTEGER,createDate DATE DEFAULT (date('now','localtime')))";
		db.execSQL(sql);
	}

	/**
	 * id:主键
	 * stationname:车站名称
	 * stationdec:车站描述
	 * line:路线
	 * region:区域
	 * regionid:详细地址列表码的序列(e.g.: 100001,100002,100003)
	 * transmode:发送方式  1:火车    2:汽车
	 * status:状态
	 * 
	 * @param db
	 */
	private void createStationManager(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_station_manager + " (id INTEGER PRIMARY KEY AUTOINCREMENT,stationname VARCHAR(20),stationdec VARCHAR(20),line VARCHAR(20),region VARCHAR(20),regionid VARCHAR(20),transmode INTEGER,status INTEGER,expand1 VARCHAR(20),expand2 VARCHAR(20))";
		db.execSQL(sql);
	}

	/**
	 * id:发运单ID transmode:发运方式： 1：火车发运(车皮) 2:汽车发运(货车) 
	 * transid:发运单id(火车发运单/汽车发运单)
	 * elemtype:类型 1：托盘包含的标签 2：单个产品的标签 
	 * labelid:标签ID 
	 * timestamp:时间戳
	 * expand1:目前用作判定invoice是否有效
	 * @param db
	 */
	private void createInvoice(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_invoice
				+ " (id INTEGER PRIMARY KEY AUTOINCREMENT, transmode INTEGER,transid INTEGER,elemtype INTEGER,labelid VARCHAR(20),timestamp VARCHAR(20),package_id varchar(32),expand1 VARCHAR(20),expand2 VARCHAR(20))";
		db.execSQL(sql);
	}
	
	/**
	 * start_label_id：起始标签
	 * end_label_id：结束标签
	 * option_type：操作类型（其中的插入值对应于HansetOperationConstant类中的值）
	 * option_id：关联的表的id
	 * @param db
	 */
	private void createBatchLabelOption(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_batch_label_option + " (id INTEGER PRIMARY KEY AUTOINCREMENT,start_label_id bigint,end_label_id bigint,option_type INTEGER,option_id INTEGER)";
		db.execSQL(sql);
	}

	/**
	 * label_id：扫描的标签id
	 * option_type：操作类型（其中的插入值对应于HansetOperationConstant类中的值）
	 * option_id：关联的表的id
	 * @param db
	 */
	private void createSingleLabelOption(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_single_label_option + " (id INTEGER PRIMARY KEY AUTOINCREMENT,label_id bigint,option_type INTEGER,option_id INTEGER)";
		db.execSQL(sql);	
	}

	/**
	 * id:激活表ID,主键自增
	 * product_id：对应的产品表中的产品ID
	 * product_date：生产日期
	 * product_batch_number：生产批号
	 * group_number:班组号
	 * factory_code:厂区
	 * producer：生产者
	 * option_mode：操作方式   0：单标激活   1：批量激活
	 * status：提交状态  0：未提交  1：提交失败
	 * error_code：服务器返回的错误码
	 * createDate：创建时间
	 * 
	 * @param db
	 */
	private void createActivateInfo(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_activate_info + " (id INTEGER PRIMARY KEY AUTOINCREMENT,product_id VARCHAR(20),product_date VARCHAR(20),product_batch_number VARCHAR(20),group_number VARCHAR(20),factory_code VARCHAR(20) DEFAULT '358000000_6',producer VARCHAR(20),option_mode INTEGER DEFAULT 0 ,status INTEGER DEFAULT 0 ,error_code INTEGER,createDate DATE DEFAULT (date('now','localtime')))";
		db.execSQL(sql);		
	}

	/**
	 * id:产品id，服务器返回的数据直接插入
	 * name：产品名称
	 * nid：产品编号（即，商品条码）
	 * p_image_url:图片的URL
	 * choiceCount:选择次数
	 * @param db
	 */
	private void createProductInfo(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_product_info + " (id INTEGER,name VARCHAR(20),nid VARCHAR(20),p_image_url VARCHAR(20),choiceCount INTEGER)";
		db.execSQL(sql);		
	}
	
	/**
	 * id:产品id，服务器返回的数据直接插入
	 * name：产品名称
	 * nid：产品编号（即，商品条码）
	 * p_image_url:图片的URL
	 * choiceCount:选择次数
	 * @param db
	 */
	private void createProductChoiceCount(SQLiteDatabase db) {
		String sql = "CREATE TABLE " + tb_product_choice_count + " (id INTEGER PRIMARY KEY,choiceCount INTEGER)";
		db.execSQL(sql);		
	}



	/**
	 * ms2 yyyy-MM-dd HH:mm:ss 将长时间格式字符串转换为字符串 yyyy-MM-dd HH:mm:ss
	 * 
	 * @return
	 */
	@SuppressLint("SimpleDateFormat")
	public String getNowDateTime() {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String dateString = formatter.format(Calendar.getInstance().getTime());
		return dateString;
	}
}
