/**
 * All rights Reserved, Designed By www.freemud.cn
 *
 * @Title: CartGoods
 * @Package cn.freemud.entities.vo
 * @Description:
 * @author: song.cai
 * @date: 2018/12/28 16:45
 * @version V1.0
 * @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
 * 注意：本内容仅限于上海非码科技内部传阅，禁止外泄以及用于其他的商业目
 */

package cn.freemud.entities.vo;

import lombok.Data;

import java.util.List;
import java.util.Objects;
import java.util.UUID;

@Data
public class CartGoods {
    /**
     * 购物车一行的Id（后台生成）
     */
    private String cartGoodsUid = UUID.randomUUID().toString();
    /**
     * 单规格spuId,多规格skuId
     */
    private String goodsId;
    /**
     * 1.正常商品，2.商品券
     */
    private Integer goodsType;

    private String spuId;
    private String skuId;
    /**
     * 所有属性attributeId的拼接
     */
    private String specProductId;
    /**
     * 购物车一行商品的原单机
     */
    private Long originalPrice;

    /**
     * 购物车一行商品的包装费
     */
    private Long packPrice;

    /**
     * 购物车一行商品的原价
     */
    private Long originalAmount;

    /**
     * 购物车一行商品的现价
     */
    private Long amount;
    /**
     * 购物车一行商品的数量
     */
    private Integer qty;
    /**
     * 购物车一行商品的名称
     */
    private String name;

    /**
     * 商品的spuName
     */
    private String spuName;

    /**
     * 商品的skuName
     */
    private String skuName;

    /**
     * 购物车一行商品的副名称
     */
    private String subName;
    /**
     * 商品图片URL
     */
    private String pic;
    /**
     * 配料或属性
     */
    private List<CartGoodsExtra> extra;

    /**
     * 创建时间（mili）
     */
    private long createTimeMili = System.currentTimeMillis();
    /**
     * 1.5.5版本添加
     * 商品参与活动类型(61:买一赠一)
     */
    private Integer activityType;
    /**
     * 1.6.0 版本增加  节点ID
     */
    private String nodeId;
    /**
     * 1.6.0 版本增加 分类名
     */
    private String categoryName;


    @Data
    public final static class CartGoodsExtra {
        /**
         * 属性Id
         */
        private String attributeId;
        /**
         * 属性名
         */
        private String attributeName;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;
        CartGoods cartGoods = (CartGoods) o;
        return Objects.equals(goodsId, cartGoods.goodsId) &&
                Objects.equals(goodsType, cartGoods.goodsType) &&
                Objects.equals(spuId, cartGoods.spuId) &&
                Objects.equals(skuId, cartGoods.skuId) &&
                Objects.equals(specProductId, cartGoods.specProductId) &&
                Objects.equals(originalPrice, cartGoods.originalPrice) &&
                Objects.equals(packPrice, cartGoods.packPrice) &&
                Objects.equals(name, cartGoods.name) &&
                Objects.equals(subName, cartGoods.subName) &&
                Objects.equals(pic, cartGoods.pic) &&
                Objects.equals(extra, cartGoods.extra);
    }

    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), goodsId, goodsType, spuId, skuId, specProductId, originalPrice, packPrice, name, subName, pic, extra);
    }
}
