package com.jeesharp.business.modules.coupon.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 优惠券使用场景编号常量，与模板 {@code scene_code}、{@code cfg_biz_scene} legacy 映射对齐。
 *
 * @author jeesharp
 * @since 2026-06-05
 */
@Getter
@AllArgsConstructor
public enum CouponSceneCodeEnum {

    /**
     * 商城商品
     */
    MALL("MALL", "商城"),

    /**
     * 酒店房型
     */
    HOTEL("HOTEL", "酒店"),

    /**
     * 美食套餐
     */
    FOOD("FOOD", "美食"),

    /**
     * 景区门票预约
     */
    SCENIC("SCENIC", "门票"),

    /**
     * 研学团建预约
     */
    STUDY("STUDY", "研学"),

    /**
     * 旅游年卡购买
     */
    YEARCARD("YEARCARD", "年卡"),

    /**
     * 个人订餐（门店点餐）
     */
    FOOD_MEAL("FOOD_MEAL", "个人订餐"),

    /**
     * 店铺线下到店（会员营销）
     */
    STORE_OFFLINE("STORE_OFFLINE", "店铺线下到店");

    private final String code;
    private final String desc;

    /**
     * 是否为小程序在线支付类场景（含已对接与可预配场景，用于 C 端核销提示等）。
     */
    public boolean isOnlinePayment() {
        return switch (this) {
            case MALL, HOTEL, FOOD, SCENIC, STUDY, YEARCARD, FOOD_MEAL -> true;
            case STORE_OFFLINE -> false;
        };
    }

    /**
     * 场景编号是否属于在线支付类（未知编号返回 false）。
     */
    public static boolean isOnlinePaymentScene(String code) {
        CouponSceneCodeEnum scene = fromCode(code);
        return scene != null && scene.isOnlinePayment();
    }

    public static CouponSceneCodeEnum fromCode(String code) {
        if (code == null || code.isBlank()) {
            return null;
        }
        for (CouponSceneCodeEnum e : values()) {
            if (e.code.equalsIgnoreCase(code.trim())) {
                return e;
            }
        }
        return null;
    }
}
