<?php

namespace app\common\logic\approve;

use app\common\logic\BaseLogic;
use app\common\model\Approve;
use app\common\model\ShopMerchantSettleinLog;
use Symfony\Component\HttpClient\HttpClient;
use think\facade\Db;
use think\facade\Log;


class ApproveLogic extends BaseLogic
{
    public static function audit($approve, $params, $userInfo)
    {
        // 拒绝通过
        if ($params['check_status'] == 3) {
            if (empty($params['remark'])) {
                self::setError('请输入拒绝理由');
            }
            self::refuse($approve, $params);
        }
        // 修改任务完成状态
        if ($params['check_status'] == 2) {
            self::pass($approve);
        }

        // 回调商城,通知审核状态
        if (in_array($approve['type'], [2, 3])) {
            $shopMerchantInfo = json_decode($approve['extend'], true);
            self::shopCallBack($approve, $shopMerchantInfo, $params, $userInfo);
        }
    }

    private static function pass(Approve $approve)
    {
        $approve->check_status = 2;
        $approve->save();
    }

    private static function refuse(Approve $approve, $params)
    {
        $approve->check_status = 3;
        $approve->remark = $params['remark'];
        $approve->save();
    }

    private static function shopCallBack(Approve $approve, $shopMerchantInfo, $params, $userInfo)
    {
        $status = $params['check_status'] == 2? 1: 2;
        // 通过商户入驻审批, 记录商户入驻时间,镇农科公司市场部长任务会使用到
        if ($status == 1 &&  $approve['type'] == 2) {
            $shopMerchantInfo = json_decode($approve['extend'], true);
            $data = [
                'town_company_id' => $userInfo['company_id'],
                'mer_intention_id' => $shopMerchantInfo['mer_intention_id'],
                'create_time' => time()
            ];
            ShopMerchantSettleinLog::create($data);
        }

        // 通知商城审批状态
        $requestResponse = HttpClient::create()->request('POST', env('url.shop_prefix') . '/api/merchant/syncStatus/'.$shopMerchantInfo['mer_intention_id'], [
            'body' => ['status' => $status, 'type' => $approve['type'] ==2 ? 1: 2, 'remark'=> $params['remark']??'']
        ]);

        Log::info(['通知商城审批状态-参数', ['status' => $status, 'type' => $approve['type']]]);
        Log::info(['通知商城审批状态-响应', [$requestResponse->getContent()]]);
    }

    public static function detail($id)
    {
        return Approve::where('id', $id)->withAttr('extend', function ($value, $data) {
            return json_decode($data['extend'], true);
        })->find();
    }
}