<?php


namespace App\Http\Services;

//后台用户相关信息服务
use Log;
use App\Model\UserInfoModel;
use App\Model\IntracodeModel;
use App\Model\UserDepartmentModel;
use Illuminate\Support\Facades\DB;
use App\Model\SupplierAddressModel;
use App\Model\SupplierChannelModel;
use App\Model\SupplierAttachmentsModel;

class CompanyService
{

    //获取一体化的所有信息
    public function getUnitedCompanyInfo($supplierName, $taxNumber, $regionType = 1)
    {
        $params = [
            'company_name' => $supplierName,
            'region' => $regionType,
            'company_type' => 2,
            //'company_tax_no' => $taxNumber,
        ];
        $url = config('website.UnitedDataDomain') . '/sync/Company/getCompanyInfoByName';
        $result = curl($url, $params);
        $result = json_decode($result, true);
        $unitedCompanyInfo = [];
        if (array_get($result, 'code') === 0) {
            $unitedCompanyInfo['united_company_info'] = !empty($result['data']['companyInfo']) ? $result['data']['companyInfo'] : [];
            $unitedCompanyInfo['is_entity'] = isset($result['data']['is_entity']) ? $result['data']['is_entity'] : 0;
            $companyInfoList = array_get(array_get($result['data'], 'tycList'), 'company_info_list');
            $company = [];
            if (!empty($companyInfoList)) {
                $companyInfo = $companyInfoList[0];
                $companyInfo['establishment_time'] = $companyInfo['establishment_time'] ? $companyInfo['establishment_time'] / 1000 : 0;
                $company = [
                    'supplier_name' => $companyInfo['com_name'] == $supplierName ? $companyInfo['com_name'] : $companyInfo['en_com_name'],
                    'registered_capital' => (int)$companyInfo['registered_capital'],
                    'supplier_address' => $companyInfo['com_address'],
                    'tax_number' => $companyInfo['tyc_info']['tax_number'],
                    'phone' => $companyInfo['tyc_info']['phone_number'],
                    'establishment_time' => $companyInfo['establishment_time'] ? date('Y-m-d',
                        $companyInfo['establishment_time']) : '',
                ];
            }
            $unitedCompanyInfo['company'] = $company;
        }
        return $unitedCompanyInfo;
    }

    public function getCompanyInfo($supplierName, $taxNumber, $regionType = 1)
    {
        $params = [
            'company_name' => $supplierName,
            'region' => $regionType,
            'company_type' => 2,
            //'company_tax_no' => $taxNumber,
        ];
        $url = config('website.UnitedDataDomain') . '/sync/Company/getCompanyInfoByName';
        $result = curl($url, $params);
        $result = json_decode($result, true);
        $company = [];
        if (array_get($result, 'code') === 0) {
            $companyInfoList = array_get(array_get($result['data'], 'tycList'), 'company_info_list');
            if (!empty($companyInfoList)) {
                $companyInfo = $companyInfoList[0];
                $companyInfo['establishment_time'] = $companyInfo['establishment_time'] ? $companyInfo['establishment_time'] / 1000 : 0;
                $company = [
                    'supplier_name' => $companyInfo['com_name'] == $supplierName ? $companyInfo['com_name'] : $companyInfo['en_com_name'],
                    'registered_capital' => (int)$companyInfo['registered_capital'],
                    'supplier_address' => $companyInfo['com_address'],
                    'tax_number' => $companyInfo['tyc_info']['tax_number'],
                    'phone' => $companyInfo['tyc_info']['phone_number'],
                    'establishment_time' => $companyInfo['establishment_time'] ? date('Y-m-d',
                        $companyInfo['establishment_time']) : '',
                ];
            }

        }
        return $company;
    }

    //校验是否实体名单通过
    public function checkCompanyEntity($supplierName, $supplierNameEn = '', $supplierAddress = '', $businessLicense = '', $signComName = '')
    {
        $params = [
            'company_name_cn' => $supplierName,
            'company_name_en' => $supplierNameEn,
            'register_address' => $supplierAddress,
            'business_license' => $businessLicense,
            'company_id' => 1,
            'create_uid' => request()->user->userId,
            'create_name' => request()->user->name,
            'source_system_id' => 1,
            'address_data' => [],
            'sign_company_name' => $signComName,
        ];
        $url = config('website.UnitedDataDomain') . '/sync/Company/checkCompanyEntity';
        $result = curlJson($url, $params);
        $result = json_decode($result, true);
        if (array_get($result, 'code') === 0) {
            return $result['data']['result'];
        }
        Log::error(json_encode($result));
        return '一体化校验实体名单失败,请联系管理员';
    }

    //单独供应商校验名称和地址
    public function checkSupplierCompanyAndAddress($supplierId)
    {
        $supplier = SupplierChannelModel::where('supplier_id', $supplierId)
            ->select([
                'supplier_id',
                'supplier_name',
                'supplier_code',
                'supplier_name_en',
                'supplier_address',
                'create_uid',
                'create_name',
                'region'
            ])->first()->toArray();
        $supplierAddressList = SupplierAddressModel::where('supplier_id', $supplierId)->get()->toArray();
        $businessLicense = SupplierAttachmentsModel::where('supplier_id', $supplierId)->where('field_name', 'business_license')->value('file_url');
        if ($supplier['region'] != SupplierChannelModel::REGION_CN) {
            $registrationCertificate = SupplierAttachmentsModel::where('supplier_id', $supplierId)
                ->where('field_name', 'registration_certificate')->value('file_url');
            if ($registrationCertificate) {
                $businessLicense = $registrationCertificate;
            }
        }
        $addressData = [];
        $addressData[] = [
            'source_id' => $supplierId,
            'source_code' => $supplier['supplier_code'],
            'address_type' => '供应商地址',
            'address' => $supplier['supplier_address']
        ];
        foreach ($supplierAddressList as $supplierAddress) {
            if ($supplierAddress['address_type'] == 1) {
                $address = [
                    'source_id' => $supplierId . '_' . $supplierAddress['info_id'],
                    'source_code' => $supplier['supplier_code'],
                    'address_type' => '供应商发货地址',
                    'address' => $supplierAddress['address']
                ];
            }
            if ($supplierAddress['address_type'] == 2) {
                $address = [
                    'source_id' => $supplierId . '_' . $supplierAddress['info_id'],
                    'source_code' => $supplier['supplier_code'],
                    'address_type' => '供应商退货地址',
                    'address' => $supplierAddress['address']
                ];
            }
            if (!empty($address)) {
                $addressData[] = $address;
            }
        }
        $params = [
            'company_name_cn' => $supplier['supplier_name'],
            'company_name_en' => $supplier['supplier_name'],
            'register_address' => $supplier['supplier_address'],
            'business_license' => $businessLicense,
            'company_id' => 1,
            'create_uid' => $supplier['create_uid'],
            'create_name' => $supplier['create_name'],
            'source_system_id' => 1,
            'address_data' => $addressData,
        ];
        //dump(json_encode($params));
        $url = config('website.UnitedDataDomain') . '/sync/Company/checkCompanyEntity';
        $result = curlJson($url, $params);
        //dd($result);
        $result = json_decode($result, true);
        if (array_get($result, 'code') === 0) {
            return $result['data']['result'];
        }

        Log::error(json_encode($result));
        return '一体化校验实体名单失败,请联系管理员';
    }
}