package com.fs.his.strategy;

import com.fs.common.core.domain.R;
import lombok.Data;

/**
 * 奖品发放结果
 */
@Data
public class RewardResult {
    /**
     * 状态码（200=成功，其他为错误码）
     */
    private Integer code;

    /**
     * 是否成功（兼容旧逻辑）
     */
    private boolean success;

    /**
     * 订单号（商品类型使用）
     */
    private String orderCode;

    /**
     * 发放金额/数量（红包/积分使用）
     */
    private Long amount;

    /**
     * 结果消息
     */
    private String message;

    /**
     * 扩展数据（用于携带额外信息，如红包发送结果）
     */
    private R extData;

    /**
     * 成功静态工厂方法
     */
    public static RewardResult success() {
        RewardResult result = new RewardResult();
        result.setCode(200);
        result.setSuccess(true);
        return result;
    }

    public static RewardResult success(String orderCode) {
        RewardResult result = new RewardResult();
        result.setCode(200);
        result.setSuccess(true);
        result.setOrderCode(orderCode);
        return result;
    }

    /**
     * 成功并携带扩展数据
     */
    public static RewardResult successWithExt(R extData) {
        RewardResult result = new RewardResult();
        result.setCode(200);
        result.setSuccess(true);
        result.setExtData(extData);
        return result;
    }

    /**
     * 失败静态工厂方法（默认错误码400）
     */
    public static RewardResult fail(String message) {
        return fail(400, message);
    }

    /**
     * 失败静态工厂方法（带错误码）
     */
    public static RewardResult fail(Integer code, String message) {
        RewardResult result = new RewardResult();
        result.setCode(code);
        result.setSuccess(false);
        result.setMessage(message);
        return result;
    }
}