/**
 * All rights Reserved, Designed By www.freemud.cn
 *
 * @Title: QueryOrderResponseVo
 * @Package cn.freemud.entities.vo
 * @Description:
 * @author: liming.guo
 * @date: 2018/5/23 14:21
 * @version V1.0
 * @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
 * 注意：本内容仅限于上海非码科技内部传阅，禁止外泄以及用于其他的商业目
 */
package cn.freemud.entities.vo;

import cn.freemud.entities.dto.PromotionMessageDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDto;
import cn.freemud.entities.dto.activity.PayGiftCheckAndJoinResponseDtoNew;
import cn.freemud.entities.dto.promotion.QueryHistoryGroupVO;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.freemud.application.sdk.api.ordercenter.response.orderInfo.AfterSalesOrderResp;
import lombok.Builder;
import lombok.Data;

import java.util.ArrayList;
import java.util.List;

@Data
public class QueryOrderResponseVo {

    private String oid;
    /**
     * 订单Id二维码
     */
    private String oidBase64Image;

    private String shopId;

    private String thirdShopId;

    private String shopName;

    private String shopNameEn;

    private String shopAddress;

    private String shopPhone;

    private String wxappid;
    /**
     * 取餐方式  0 立即取餐 1 预约取餐
     */
    private Integer takeMealType;

    /**
     * 取餐方式 描述
     */
    private String takeMealTypeDesc;

    /**
     * 取餐时间
     */
    private String takeMealTime;
    /**
     * 外卖预约
     */
    private String reserveDeliveryTime;
    /**
     * 订单完成时间
     */
    private String completeTime;
    /**
     * 是否外带 ,打包  1 是 0 否
     */
    private Integer takeOut;

    /**
     * 是否外带 描述
     */
    private String takeOutDesc;

    /**
     * 桌号
     */
    private String tableNumber;

    /**
     * 取餐码
     */
    private String takeCode;
    /**
     * 订单金额
     */
    private Long amount;
    /*
     * 实际支付金额,可开票金额
     */
    private Long actualPayAmount;
    /**
     * 商品总金额 不包括满减，配送费，包装费
     */
    private Long itemAmount;
    /**
     * 优惠总金额
     */
    private Long discountTotalAmount;
    /**
     * 包装费
     */
    private Long packageAmount;
    /**
     * 配送费
     */
    private Long deliveryAmount;
    /**
     * 配送费原价
     */
    private Long originalDeliveryAmount;
    /**
     * 运费券名称
     */
    private String freightCouponName;
    /**
     * 月享卡优惠总金额
     */
    private Long monthCardTotalDiscount;
    /**
     * 月享卡优惠总金额
     */
    private String monthCardTotalDiscountName;
    /**
     * 限时折扣优惠金额
     */
    private Long discountLimitAmount;
    /**
     * 满减总优惠金额V1.5.2增加
     */
    private Long fullDiscountAmount;
    /**
     * 用户积分抵扣金额
     */
    private Long customerScoreAmount;
    /**
     * 用户积分抵扣提示
     */
    private String customerScorePrompt;
    /**
     * 订单类型  enum  OrderType
     */
    private Integer orderType;

    /**
     * 订单类型描述
     */
    private String orderTypeDesc;
    /**
     * 订单类型描述
     */
    private String orderTypeDescEn;
    /**
     * 订单状态   enum  OrderStatus ,DeliverStatus=42 骑手取餐中
     */
    private Integer orderStatus;
    /**
     * 订单状态描述
     */
    private String orderStatusDesc;
    /**
     * 订单状态描述
     */
    private String orderStatusDescEn;
    /**
     * 订单状态显示的对应描述
     */
    private String orderStatusDescText;
    /**
     * 取餐排队号  订单详情使用 默认为空
     */
    private String queueIndex;
    /**
     * 预计排队时间，排队人数
     */
    private String returnWords;
    /**
     * 排队进度百分比
     */
    private String progress = "" ; //进度

    /**
     * 是否展示进度条
     */
    private Integer orderProgressBarStatus ;


    /**
     * 是否展示进度条
     */
    private Integer progressBarStatus;

    /**
     * 是否支持退款
     */
    private String payTurnoffRefund ;
    /**
     * 申请退款按钮
     */
    private Boolean buttonRefund;

    private Boolean buttonComplain;
    /**
     * 联系商家按钮
     */
    private Boolean buttonContactPartner;
    /**
     * 评价按钮
     */
    private Boolean buttonEvaluate;
    /**
     * 联系骑手按钮
     */
    private Boolean buttonContactRider;
    /**
     * 取餐码按钮
     */
    private Boolean buttonMealCode;
    /**
     * 支付状态  enum  PayStatus
     */
    private Integer payStatus;
    /**
     * 支付状态描述
     */
    private String payStatusDesc;
    /**
     * 支付状态描述英文
     */
    private String payStatusDescEn;
    /**
     * 支付时间
     */
    private String payCreateTime;
    /**
     * 付款方式  微信支付
     */
    private String orderPayType;

    /**
     * 付款方式  微信支付
     */
    private String orderPayTypeDescEn;
    /**
     * 收货地址id
     */
    private String receiveId;

    /**
     * 支付渠道
     */
    @JsonIgnore
    @JSONField(serialize = false)
    private String payChannel;
    /**
     * 付款单号
     */
    private String payVoucher;
    /**
     * 付款单号条形码
     */
    private String payVoucherBarCode;
    /**
     * 退款状态  enum  refundStatus
     */
    private Integer refundStatus;

    /**
     * 退款状态描述
     */
    private String refundStatusDesc;

    /**
     * 退款状态描述
     */
    private String refundStatusDescEn;

    /**
     * 退款原因
     */
    private String refundReason;

    /**
     * 退款文案提示  若48小时后商家未处理，自动同意/拒绝退款
     */
    private String refundTips;
    /*
     * 麦咖啡 外卖单或者自提单文案提示
     */
    private String mcCafeOrderTag;
    /**
     * 退款单
     */
    private String rid;

    /**
     * 申请退款时间 yyyy-MM-dd HH:mm:ss
     */
    private String refundCreateTime;

    /**
     * 订单备注
     */
    private String orderRemark;
    /**
     * 订单创建时间
     */
    private String orderCreateTime;
    /**
     * 订单更新时间
     */
    private String modifiedTime;

    private Integer sex;
    private String sexDesc;
    /**
     * 收货办公楼
     */
    private String officeName;
    /**
     * 收货地址
     */
    private String receiveAddress;
    /**
     * 收货用户名
     */
    private String receiveUsername;
    /**
     * 收货电话
     */
    private String receiveMobile;

    private Integer distance;
    /**
     * 订单是否可申请退款  可申请退款条件 ：1 .支付未接单 2. 已接单，制作完成，配送中 ，用户可申请退款
     */
    private Boolean enableRefund;
    /**
     * 订单是否可再次申请退款  必须经过规定的间隔时间才可以再次申请
     */
    private Boolean afterRefundInterval = false;
    /**
     * 订单是否可再次申请退款  必须经过规定的间隔时间才可以再次申请
     */
    private Long refundIntervalTime = 0l;

    private Long totalScore;


    private List<ProductVo> products;

    private List<OrderAccountVo> orderAccounts;

    private PromotionMessageDto promotionMessage;

    /**
     * 优惠券信息
     * 后续优惠券信息 以维护到 couponInfos 请停止使用该字段 20211026
     * 记得和前端对接下 小程序版本 是否支持 couponInfos
     */
    private CouponInfoVo couponInfo;

    /**
     * 是否有裂变活动分享
     */
    private String activityId;
    /**
     * 红包图片
     */
    private String redpacketsPicture;
    /**
     * 是否是第三方配送单
     */
    private Boolean hasThirdDelivery;
    /**
     * 配送状态
     */
    private Integer deliveryStatus;
    /**
     * 运单号
     */
    private String deliveryId;
    /**
     * 骑手名称 商家自配送名称
     */
    private String riderName;
    /**
     * 骑手文案 商家自配送文案
     */
    private String riderText;
    /**
     * 骑手头像
     */
    private String riderPhoto;
    /**
     * 骑手电话
     */
    private String riderPhone;
    /**
     * 门店首页图片
     */
    private String shopImageUrl;
    /**
     * 门店经度
     */
    private String longitude;
    /**
     * 门店纬度
     */
    private String latitude;

    /**
     * 商品数量
     */
    private Integer productNum;
    /**
     * 订单流转时间
     */
    private ArrayList<OrderStatusFlow> orderStatusFlows;
    /**
     * 取餐页面订单流转状态
     */
    private ArrayList<TakeMealFlow> takeMealFlows;

    //支付有礼活动名称
    private String activityName;

    //支付有礼活动号
//    private String activityNo;

    /**
     * 支付有礼发送方式
     * 0-静默发送
     * 5-手动发送
     */
//    private Integer activitySendType;

    //支付有礼领券集合
    private List<PayGiftCouponVo> coupons;
    private PayGiftWechatCouponInfoVo wechatCouponInfo;


    /**
     * 支付有礼奖励类型：1-非码券，2-微信商家券，3-弹窗奖励
     */
//    private String syncWechat;

    /**
     * 支付有礼活动配图
     */
//    private String activityPicture;

    /**
     * 支付有礼跳转设置(跳转类型) 0:无 5:跳转页面 10:外部小程序 15:跳转商品 20:跳转H5
     */
//    private String redirectType;

    /**
     * 支付有礼跳转商品
     */
//    private PayGiftGoodsConfigVo goodsConfig;

    /**
     * 支付有礼跳转小程序
     */
//    private PayGiftMicroProgramConfigVo microProgramConfig;

    /**
     * 支付有礼跳转页面5和20跳转外部H5对应的路径或者URL
     */
//    private String redirectPage;

    /**
     * 收件人省份
     */
    private String receiveProvince;

    /**
     * 收件人城市
     */
    private String receiveCity;

    /**
     * 收件人区
     */
    private String receiveRegion;

    /**
     * 订单业务类型 1:普通订单 2:虚拟订单 3:会员订单 4:积分商城订单 5:储值卡订单 6:卖券虚拟商品
     */
    private Integer bizType;

    /**
     * 麦咖啡餐道订单号
     */
    private String downstreamThirdOrderCode;

    /**
     * 订单特殊类型 1:普通订单 2:拼团订单 3:秒杀订单 4:拼单订单
     */
    private Byte marketingType;

    /**
     * 订单参与人数（普通订单-0；拼单订单-实际参与人数）
     */
    private Long orderUserNum;

    /**
     * 团号查询拼团信息
     */
    private QueryHistoryGroupVO spellGroup;

    /**
     *  拼团团号,此处用于接收转换信息
     */
    private String spellGroupCode;

    @Data
    public static class OrderStatusFlow {
        /**
         * 时间描述
         */
        private String status;
        /**
         * 时间
         */
        private String orderTime;
    }

    @Data
    @Builder
    public static class TakeMealFlow {

        /**
         * 流程名称
         */
        private String name;
        /**
         * 是否显示
         */
        private Boolean active;
        /**
         * icon图标
         */
        private String icon;

    }

    /**
     * 买一赠一用户选择的商品
     */
    private List<chooseGood> chooseGoods;

    @Data
    public static class chooseGood {

        /**
         * 活动code
         */
        private String activeCode;

        /**
         * 活动类型
         */
        private Integer activeType;

        /**
         * 赠送商品名称
         */
        private String goodsName;

        /**
         * 赠送商品id
         */
        private String goodsId;

        /**
         * 赠送商品数量
         */
        private Integer qty;

        /**
         * 可兑换商品券编号
         */
        private String couponCode ;

        /**
         * 可兑换券的数量
         */
        private Integer couponQty ;

        /**
         *  可兑换商品券名称
         */
        private String couponName ;

        /**
         *  是否已选择寄杯
         */
        private Boolean sendCoupon;

    }

    /**
     *促销返回参数对象 20201223 提出紧急需求变更
     */
    private PayGiftCheckAndJoinResponseDto payGiftReps;

    /**
     * 是否买券订单 麦咖啡使用
     */
    private Integer isCouponOrder;

    /**
     * 配送渠道
     */
    private String expressChannelName;

    /**
     * 配送渠道编号
     */
    private String expressChannelCode;

    /**
     * 快递单号
     */
    private String expressNo;

    /**
     * 服务器时间
     */
    private String autoReviceTime;

    private AfterSalesOrderResp afterSalesOrderResp;

    /**
     * 预定单的 您的电话
     */
    private String userPhone;
    /**
     *  预定单 蛋糕寄语(额外祝福语)
     */
    private String sendWord;


    /**
     * 用户申请退款原因 1=退款退货 2=只退款不退货
     */
    private Byte refundMode;

    /**
     * 是否展示申请退款按钮
     */
    private boolean refundButtonDisable;

    /**
     * 是否展示申请退款按钮
     */
    private boolean orderCompareAfterSaleOrder;

    /**
     * 【订单聚合层】总部和区域活动可同时生效 直接反馈促销给的活动数据
     */
    private List<PayGiftCheckAndJoinResponseDtoNew> newPayGift;

    //是否已开票，true已开票，默认false未开票
    private Boolean needInvoice;

    /**
     *  可使用多张优惠券, 使用该字段展示所有使用的优惠券信息
     *  包括 :
     *  cn.freemud.enums.OrderAccountType#verificationCoupon
     *  后续 需要移除 该类里面的 couponinfo字段, 20211026
     */
    private List<CouponInfoVo> couponInfos = new ArrayList<>();
}
