package com.xmomen.module.wx.module.cart.model;

import java.sql.Timestamp;
import java.util.Date;

import com.xmomen.module.wx.util.Constant;

import lombok.Data;

public @Data class CartMetadata {
	
	// 用户token
	private String userToken;
	/**
	 * 商品ID
	 */
	private Integer itemId;
	
	/**
	 * 商品数目
	 */
	private Integer itemQty = 0;
	
	/**
	 * MODIFY 数目改动，包含新增
	 * DELETE 物品删除
	 * CLEAN 已与DB同步了
	 */
	private volatile String status = Constant.CLEAN;
	
	private volatile Timestamp updateTime;
	
	
	/**
	 * 会自动根据数据更新状态和时间
	 * @param number
	 * return order是否有改变
	 */
	public boolean setItemQty(Integer number) {
		// 如果itemQty为空且number等于itemQty，则返回false
		// 如果数目为空且数目等于number，则返回false
		// 如果itemQty不为空且number等于itemQty，则返回false
		if(this.itemQty == null && this.itemQty == number) return false;
		// 如果number等于0，则将itemQty设置为number，将status设置为Constant.DELETE，将updateTime设置为当前时间，返回true
		// 如果数目不为空且数目等于number，则返回false
		// 如果数目为0，则将数目设置为number，状态设置为DELETE，时间设置为当前时间，返回true
		if(this.itemQty != null && this.itemQty.equals(number)) return false;
		if(number == 0) {
			this.itemQty = number;
		// 如果number大于0，则将itemQty设置为number，将status设置为Constant.MODIFY，将updateTime设置为当前时间，返回true
		// 如果数目大于0，则将数目设置为number，状态设置为MODIFY，时间设置为当前时间，返回true
			this.status = Constant.DELETE;
			this.updateTime = new Timestamp(new Date().getTime());
			return true;
		} else if(number > 0) {
			this.itemQty = number;
		// 否则返回false
			this.status = Constant.MODIFY;
			this.updateTime = new Timestamp(new Date().getTime());
			return true;
		}
		return false;
	}
}
