<?php

namespace App\Http\Controllers\Sync;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Filter\SupplierFilter;
use App\Http\Middleware\CheckLogin;
use App\Http\Services\AdminUserService;
use App\Http\Services\SupplierService;
use App\Http\Services\SyncSupplierService;
use App\Model\SupplierChannelModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Validator;


//提供外部系统的接口
class SupplierSyncController extends BaseSyncController
{
    public function syncUniteResult(Request $request)
    {
        $resultData = $request->only([
            'group_code',
            'source_sn',
            'company_name',
            'init_nature',
            'company_nature',
            'company_category',
        ]);

        $rules = [
            "group_code" => "required",
            "source_sn" => "required",
            "company_name" => "required",
            "init_nature" => 'required',
            "company_nature" => "required",
            "company_category" => "required",
        ];

        $validator = Validator::make($rules, $rules);

        //判断联系方式的表单验证
        if ($validator->fails()) {
            $error = $validator->errors()->first();
            Log::warning($error);
            $this->syncResponse(-1, $error);
        }

        $result = (new SyncSupplierService())->syncSupplierToUnitedResult($resultData);
        $this->syncResponse(0, '同步一体化信息成功');

    }

    public function receiveEntityResult(Request $request)
    {
        $resultData = $request->all();

        Log::error(json_encode($resultData));

        //$resultData['result_map'] = !empty($resultData['result_map']) ? json_decode($resultData['result_map'], true) : [];
        //$resultData['tag_list'] = !empty($resultData['tag_list']) ? json_decode($resultData['tag_list'], true) : [];
        if (is_array($resultData['result_map'])) {
            $resultData['result'] = (int)$resultData['result_map']["1"];
        }
        if ($resultData['result'] !== 0 && empty($resultData)) {
            $this->syncResponse(-1, '没有获取到正确的类型');
        }

        if (!in_array($resultData['result'], [0, 1, -1, -2, -3])) {
            $this->syncResponse(-1, '非法公司分类');
        }


        $rules = [
            "company_name" => "required",
            //"result" => "required",
        ];

        $validator = Validator::make($rules, $rules);
        //判断联系方式的表单验证
        if ($validator->fails()) {
            $error = $validator->errors()->first();
            $this->syncResponse(-1, $error);
        }
        //这里还要去判断是是拉黑
        if ($resultData['result'] == -2) {
            $data['status'] = SupplierChannelModel::STATUS_BLOCK;
            $data['block_reason'] = '一体化系统黑名单供应商';
            $data['is_entity'] = -1;
            $data['update_time'] = time();
            SupplierChannelModel::where('supplier_name', $resultData['company_name'])
                ->update($data);
            $this->syncResponse(0, '获取审核结果广播成功');
        }

        (new SyncSupplierService())->receiveEntityResult($resultData);
        $this->syncResponse(0, '获取审核结果广播成功');

    }

    //获取供应商需要审核的数量
    public function GetNeedAuditSupplierCount(Request $request)
    {
        $userId = $request->input('user_id');
        if (!$userId) {
            $this->response(-1, 'user_id不能为空');
        }
        $codeId = (new AdminUserService())->getCodeIdsByUserId($userId);
        request()->merge([
            'user' => (object)[
                'userId' => $userId,
                'codeId' => $codeId,
            ]
        ]);
        $perms = (new CheckLogin())->getPerms();
        request()->merge(['perms' => $perms]);
        $model = new SupplierChannelModel();
        $query = $model->orderBy('update_time', 'desc');
        $filter = new SupplierFilter();
        $params = $request->except('user', 'perms');
        $params['need_audit'] = 1;
        $params['source_type'] = 'all';
        $query = $filter->listFilter($params, $query);
        $count = $query->count();
        $this->response(0, 'ok', $count);
    }
}