package com.liquidnet.service.kylin.constant;

/**
 * 演出票拼团状态常量，覆盖活动、订单、成员三类状态机。
 */
public class GroupBuyStatusConst {

    private GroupBuyStatusConst() {
    }

    /**
     * 拼团活动状态：草稿 → 待启动 → 进行中 ⇄ 已关闭 → 已结束。
     */
    public static class ActivityStatus {
        /** 草稿（未提交） */
        public static final Integer DRAFT = 0;
        /** 待启动（手动/定时） */
        public static final Integer PENDING = 1;
        /** 进行中（用户可发起/加入拼团） */
        public static final Integer ACTIVE = 2;
        /** 已关闭（B端手动关停，可重新开启） */
        public static final Integer CLOSED = 3;
        /** 已结束（到结束时间，终态） */
        public static final Integer ENDED = 4;

        private ActivityStatus() {
        }
    }

    /**
     * 启动方式。
     */
    public static class LaunchType {
        /** 立即启动：保存后活动立即生效 */
        public static final Integer IMMEDIATE = 1;
        /** 手动启动：保存后状态=待启动，B端手动点启动 */
        public static final Integer MANUAL = 2;
        /** 定时启动：保存后状态=待启动，到定时时间自动激活 */
        public static final Integer SCHEDULED = 3;

        private LaunchType() {
        }
    }

    /**
     * 优惠类型。
     */
    public static class DiscountType {
        /** 固定价格（元） */
        public static final Integer FIXED_PRICE = 1;
        /** 折扣（1-100，如85表示85折） */
        public static final Integer DISCOUNT = 2;
        /** 满减（元） */
        public static final Integer REDUCE = 3;

        private DiscountType() {
        }
    }

    /**
     * 拼团订单状态：预占 → 拼单中 → 拼成 / 失败 / 已取消。
     */
    public static class OrderStatus {
        /** 待支付发起（团长已创建拼团但尚未下单） */
        public static final Integer PREPARE = -1;
        /** 拼单中（团长已支付，等待成员加入） */
        public static final Integer PENDING = 0;
        /** 拼成（达到目标人数） */
        public static final Integer SUCCESS = 1;
        /** 失败（24h超时未成团） */
        public static final Integer FAILED = 2;
        /** 已取消（团长手动取消） */
        public static final Integer CANCELLED = 3;

        private OrderStatus() {
        }
    }

    /**
     * 公开/私密标记。
     */
    public static class PublicFlag {
        /** 私密（不进公开轮播，仅通过 shareToken 加入） */
        public static final Integer PRIVATE = 0;
        /** 公开（进入轮播列表） */
        public static final Integer PUBLIC = 1;

        private PublicFlag() {
        }
    }

    /**
     * 拼团成员状态：下单后待支付 → 已加入 → 已退款。
     */
    public static class MemberStatus {
        /** 待支付（已下单但未支付/支付中） */
        public static final Integer PENDING_PAY = -1;
        /** 已加入（支付成功） */
        public static final Integer JOINED = 0;
        /** 已退款（拼单中退款/拼成后退款） */
        public static final Integer REFUNDED = 1;

        private MemberStatus() {
        }
    }
}
