<?php


namespace App\Modules\OrangeSite\Services;


use App\Modules\Trace\TraceContext;
use RuntimeException;

class OrangeSiteRechargeReportCheckContext
{
    /**
     * @var string 平台,橙子建站
     */
    public $platform = 'orange';
    /**
     * @var 订单的用户 表 users 记录
     */
    public $user;
    /**
     * @var 订单信息 表 orders 记录
     */
    public $order;
    /**
     * @var 订单关联站点的回传配置信息  表 channel_callback_configs 记录
     */
    public $channelCallbackConfig;
    /**
     * @var array 判定过程中的附带信息.
     * <pre>
     * [
     *  'configRate' => 32, // 当前站点设置的回传比例为 32%
     *  'reportRate' => 43,  // 当前站点实际的回传比例[在本单回传之前的比例] 为 43%
     * ]
     * </pre>
     */
    public $reportInfo;
    /**
     * @var array 根据配置,对当前订单的回传与否的判定结果
     * <pre>
     * [
     *      'result' => true|false  , // true-表示订单回传,false-订单不回传
     *      'type' => 'xxx',  // 不回传的原因:amount_filter-金额过滤
     *      'content' => 'xxx', // 具体的提示信息
     *      'needRecord' => true | false , // true-需要记录到report_user_charge_records表中,false-不记录
     * ]
     * <pre>
     */
    public $result;
    /**
     * @var TraceContext traceInfo 信息
     */
    public $traceContext;

    public function __construct($user, $order, $channelCallbackConfig, $traceContext, $channelSettingRate = 0)
    {
        $this->user = $user;
        $this->order = $order;
        $this->channelCallbackConfig = $channelCallbackConfig;
        $this->traceContext = $traceContext;
        $this->result = [
            'result' => true,
            'needRecord' => true,
        ];
        $this->reportInfo = [
            'configRate' => $channelSettingRate,
            'reportRate' => 0
        ];
    }

    public function checkNecessaryInfo()
    {
        if (!$this->user) {
            throw new RuntimeException('用户信息不存在');
        }
        if (!$this->order) {
            throw new RuntimeException('订单信息不存在');
        }
        if (!$this->channelCallbackConfig) {
            throw new RuntimeException('站点回传配置信息不存在');
        }
    }
}