<?php


namespace App\Http\Services;


use App\Model\LogModel;
use App\Model\SupplierAddressModel;
use App\Model\SupplierAttachmentsModel;
use App\Model\SupplierChannelModel;
use App\Model\SupplierContactModel;
use http\Exception\InvalidArgumentException;

class SupplierAddressService
{
    //保存收退货地址
    public function saveAddress($map)
    {
        $supplierModel = new SupplierChannelModel();
        $supplierCode = $supplierModel->where('supplier_id', $map['supplier_id'])->value('supplier_code');
        //组装成两条数据(鬼知道以前为啥存两条)
        $shippingData = [
            'supplier_id' => $map['supplier_id'],
            'supplier_code' => $supplierCode,
            'address' => $map['shipping_address'],
            'address_type' => 1,
        ];
        $addressModel = new SupplierAddressModel();
        $infoId = $addressModel->where('supplier_id', $map['supplier_id'])->where('address_type', 1)->value('info_id');
        if ($infoId) {
            $result = $addressModel->where('info_id', $infoId)->update($shippingData);
        } else {
            $result = $addressModel->insert($shippingData);
        }
        if ($result === false) {
            return $result;
        }
        $returnData = [
            'supplier_id' => $map['supplier_id'],
            'supplier_code' => $supplierCode,
            'address' => $map['return_address'],
            'address_type' => 2,
            'consignee' => $map['return_consignee'],
            'phone' => $map['return_phone'],
        ];
        $infoId = $addressModel->where('supplier_id', $map['supplier_id'])->where('address_type', 2)->value('info_id');
        if ($infoId) {
            $result = $addressModel->where('info_id', $infoId)->update($returnData);
        } else {
            $result = $addressModel->insert($returnData);
        }

        return $result;
    }

    //保存发货地址
    public function saveShippingAddress($supplierId, $address)
    {
        $supplierModel = new SupplierChannelModel();
        $supplierCode = $supplierModel->where('supplier_id', $supplierId)->value('supplier_code');
        //组装成两条数据(鬼知道以前为啥存两条)
        $shippingData = [
            'supplier_id' => $supplierId,
            'supplier_code' => $supplierCode,
            'address' => $address,
            'address_type' => 1,
        ];
        $addressModel = new SupplierAddressModel();
        $addressModel->insert($shippingData);
    }

    //更新一体化的地址库
    public function updateUnitedAddress($supplierId, $supplierAddress, $shippingAddress, $returnAddress)
    {
        //先找出原始地址数据,然后比对
        $supplier = SupplierChannelModel::where('supplier_id', $supplierId)->select([
            'supplier_id',
            'supplier_code',
            'supplier_name',
            'supplier_address',
            'create_name',
            'create_uid',
        ])->first()->toArray();
        $oldSupplierAddress = $supplier['supplier_address'];
        //收发货地址
        $addressData = SupplierAddressModel::where('supplier_id', $supplierId)->select(['info_id', 'address', 'address_type', 'supplier_id'])
            ->get()->toArray();
        $oldShippingAddress = $oldReturnAddress = '';
        $oldReturnAddressSourceId = $oldShippingAddressSourceId = '';
        foreach ($addressData as $item) {
            if ($item['address_type'] == 1) {
                //发货地址
                $oldShippingAddress = $item['address'];
                $oldShippingAddressSourceId = $supplierId . '_' . $item['info_id'];
            } else {
                //退货地址
                $oldReturnAddress = $item['address'];
                $oldReturnAddressSourceId = $supplierId . '_' . $item['info_id'];
            }
        }

        //比较,如果有变化,则请求一体化接口
        $changedAddress = [];
        if ($oldSupplierAddress != $supplierAddress) {
            $changedAddress[] = [
                'source_id' => $supplierId,
                'source_code' => $supplier['supplier_code'],
                'address_type' => '注册地址',
                'address' => $supplierAddress,
            ];
        }
        if ($oldShippingAddress != $shippingAddress) {
            $changedAddress[] = [
                'source_id' => $oldShippingAddressSourceId,
                'source_code' => $supplier['supplier_code'],
                'address_type' => '收货地址',
                'address' => $shippingAddress,
            ];
        }
        if ($oldReturnAddress != $returnAddress) {
            $changedAddress[] = [
                'source_id' => $oldReturnAddressSourceId,
                'source_code' => $supplier['supplier_code'],
                'address_type' => '退货地址',
                'address' => $returnAddress,
            ];
        }
        $businessLicense = SupplierAttachmentsModel::where('supplier_id', $supplierId)->where('field_name', 'business_license')->value('file_url');
        //构建修改地址库请求数据
        $params = [
            'company_name_cn' => $supplier['supplier_name'],
            'business_license' => $businessLicense,
            'source_system_id' => 1,
            'create_uid' => $supplier['create_uid'],
            'create_name' => $supplier['create_name'],
            'address_data' => $changedAddress,
        ];

        $url = config('website.UnitedDataDomain') . '/sync/Address/updateAddress';
        $result = curl($url, $params);
        $result = json_decode($result, true);
        \Log::error($result);
        if (array_get($result, 'code') != 0) {
            \Log::error('更新一体化地址库失败 : ' . json_encode($result));
        }
    }

    //批量同步地址数据到一体化初始化
    public static function initUnitedAddress()
    {
        ini_set('memory_limit', -1);
        //先找出原始地址数据,然后比对
        $supplierList = SupplierChannelModel::where('is_type', 0)->select([
            'supplier_id',
            'supplier_code',
            'supplier_name',
            'supplier_address',
            'create_name',
            'create_uid',
        ])->get()->toArray();
        foreach ($supplierList as $supplier) {
            $supplierId = $supplier['supplier_id'];
            //收发货地址
            $addressData = SupplierAddressModel::where('supplier_id', $supplierId)->select(['info_id', 'address', 'address_type', 'supplier_id'])
                ->get()->toArray();
            $oldShippingAddress = $oldReturnAddress = '';
            $oldReturnAddressSourceId = $oldShippingAddressSourceId = '';
            foreach ($addressData as $item) {
                if ($item['address_type'] == 1) {
                    //发货地址
                    $oldShippingAddress = $item['address'];
                    $oldShippingAddressSourceId = $supplierId . '_' . $item['info_id'];
                } else {
                    //退货地址
                    $oldReturnAddress = $item['address'];
                    $oldReturnAddressSourceId = $supplierId . '_' . $item['info_id'];
                }
            }

            //比较,如果有变化,则请求一体化接口
            $changedAddress = [];
            if ($supplier['supplier_address']) {
                $changedAddress[] = [
                    'source_id' => $supplierId,
                    'source_code' => $supplier['supplier_code'],
                    'address_type' => '注册地址',
                    'address' => $supplier['supplier_address'],
                ];
            }
            if ($oldShippingAddress) {
                $changedAddress[] = [
                    'source_id' => $oldShippingAddressSourceId,
                    'source_code' => $supplier['supplier_code'],
                    'address_type' => '收货地址',
                    'address' => $oldShippingAddress,
                ];
            }

            if ($oldReturnAddress) {
                $changedAddress[] = [
                    'source_id' => $oldReturnAddressSourceId,
                    'source_code' => $supplier['supplier_code'],
                    'address_type' => '退货地址',
                    'address' => $oldReturnAddress,
                ];
            }

            if (empty($changedAddress)) {
                dump('完全没有地址,不同步 : ' . $supplier['supplier_name']);
                continue;
            }

            $businessLicense = SupplierAttachmentsModel::where('supplier_id', $supplierId)->where('field_name', 'business_license')->value('file_url');
            //构建修改地址库请求数据
            $params = [
                'company_name_cn' => $supplier['supplier_name'],
                'business_license' => $businessLicense,
                'source_system_id' => 1,
                'create_uid' => $supplier['create_uid'],
                'create_name' => $supplier['create_name'],
                'address_data' => $changedAddress,
            ];
            dump($params);
            //改成队列投放
            (new QueueDeliveryService())->push(QueueDeliveryService::PUSH_TYPE_SYNC_HTTP, '/sync/Address/updateAddress',
                $params);
            dd(1232);
        }

    }

}