<?php

namespace app\api\controller;

use app\api\lists\approve\ApproveLists;
use app\common\model\Approve;
use Symfony\Component\HttpClient\HttpClient;
use think\Exception;
use think\facade\Db;

class ApproveController extends BaseApiController
{
    public function lists()
    {
        return $this->dataLists(new ApproveLists());
    }

    public function approveType()
    {
        $list = Db::name('flow_type')->where(['status' => 1])->field(['id,name'])->select()->toArray();
        return $this->success('成功', $list);
    }

    /**
     * 前台通用审批接口  审批后的业务逻辑,
     */
    public function audit()
    {
        try {
            $params = $this->request->param(); // id check_status remark
            $approve = Approve::find($params['id']);
            if (!$approve) {
                throw new Exception('数据不存在');
            }
            Db::startTrans();

            // 拒绝通过
            if ($params['check_status'] == 3) {
                if (empty($params['remark'])) {
                    throw new Exception('请输入拒绝理由');
                }
                $this->refuse($approve, $params);
            }
            // 修改任务完成状态
            if ($params['check_status'] == 2) {
                $this->pass($approve);
            }

            // 回调商城,通知审核状态
            if (in_array($approve['type'], [2, 3])) {
                $shopMerchantInfo = json_decode($approve['extend'], true);
                self::shopCallBack($approve, $shopMerchantInfo, $params);
            }
            Db::commit();
            return $this->fail('操作成功');
        } catch (Exception $exception) {
            Db::rollback();
            return $this->fail('审核失败');
        }
    }

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

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

    private static function shopCallBack(Approve $approve, $shopMerchantInfo, $params)
    {
        $status = $params['check_status'] == 2? 1: 2;
        if ($params['check_status'] == 3) {
            $status = 2;
        }
        // 通知商城审批状态
        $requestResponse = HttpClient::create()->request('POST', env('url.shop_prefix') . '/api/merchant/syncStatus/'.$shopMerchantInfo['mer_intention_id'], [
            'body' => ['status' => $status, 'type' => $approve['type']]
        ]);


    }
}