package com.fdkankan.scene.callback;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.dtflys.forest.callback.SuccessWhen;
import com.dtflys.forest.http.ForestRequest;
import com.dtflys.forest.http.ForestResponse;
import com.fdkankan.common.constant.ServerCode;
import com.fdkankan.common.exception.BusinessException;
import com.fdkankan.common.response.Result;

/**
 * <p>
 *  自定义成功/失败条件实现类
 *  需要实现 SuccessWhen 接口
 * </p>
 *
 * @author dengsixing
 * @since 2022/4/25
 **/

public class FdkkMiniReqSuccessCondition implements SuccessWhen {

    /**
     * 请求成功条件
     * @param req Forest请求对象
     * @param res Forest响应对象
     * @return 是否成功，true: 请求成功，false: 请求失败
     */
    @Override
    public boolean successWhen(ForestRequest req, ForestResponse res) {
        boolean reqStatus = res.noException() &&   // 请求过程没有异常
            res.statusOk() &&     // 并且状态码在 100 ~ 399 范围内
            res.statusIsNot(203);
        if(!reqStatus){
            return reqStatus;
        }

        String content = res.getContent();
        if(StrUtil.isEmpty(content)){
            reqStatus = false;
            return reqStatus;
        }
        Result result = JSON.parseObject(content, Result.class);
        if(result.getCode() != ServerCode.SUCCESS.code()){
            reqStatus = false;
            return reqStatus;
        }
        return true;
    }
}
