<?php


namespace App\Http\Services;

//后台用户相关信息服务
use App\Http\Controllers\Filter\LogFilter;
use App\Http\Transformers\LogTransformer;
use App\Http\Transformers\SupplierTransformer;
use App\Model\LogModel;
use App\Model\SupplierChannelModel;
use Illuminate\Support\Facades\DB;

class LogService
{

    //添加日志
    public function AddLog($supplierId, $type, $action, $content, $remark = '')
    {
        $adminId = request()->user->userId;
        $adminName = request()->user->name;
        $data = [
            'supplier_id' => $supplierId,
            'type' => $type,
            'action' => $action,
            'content' => $content,
            'remark' => $remark,
            'admin_id' => $adminId,
            'admin_name' => $adminName,
            'add_time' => time(),
        ];
        $model = new LogModel();
        $model->insert($data);
    }

    public function getLogs($supplierId, $type = '', $limit = 100)
    {
        $model = new LogModel();
        $query = $model->orderBy('id', 'desc');
        //显示默认的数据(有权限逻辑)
        $filter = new LogFilter();
        $query = $filter->defaultFilter($query);
        if ($type) {
            $logs = $query->where('supplier_id', $supplierId)->where('type', $type)->limit($limit)->get();
        } else {
            $logs = $query->where('supplier_id', $supplierId)->limit($limit)->get();
        }
        $transformer = new LogTransformer();
        $logs = $transformer->transformList($logs);
        return $logs;
    }

    //比对供应商修改前后的变化数据
    public function compareSupplierChange($newSupplier, $oldSupplier)
    {
        $transformer = new SupplierTransformer();
        if (empty($newSupplier['status_name'])) {
            //判断是否要转换,因为存储有两种格式的数据
            $newSupplier = $transformer->transformInfo($newSupplier);
            $oldSupplier = $transformer->transformInfo($oldSupplier);
        }
        unset($newSupplier['update_time'], $oldSupplier['update_time']);
        //二维数组转成一维数组,因为array_diff只支持一维,反正二维的内容还要更细致的比较
        $newSupplier = array_map(function ($value) {
            if (is_array($value)) {
                $value = json_encode($value);
            }
            return $value;
        }, $newSupplier);
        $oldSupplier = array_map(function ($value) {
            if (is_array($value)) {
                $value = json_encode($value);
            }
            return $value;
        }, $oldSupplier);
        $diff = array_diff($newSupplier, $oldSupplier);
        $result = [];
        foreach ($diff as $key => $item) {
            $columnMap = config('validate.SupplierNeedLogColumn');
            if (in_array($key, array_keys($columnMap))) {
                $oldValue = array_get($oldSupplier, $key, '空');
                $newValue = array_get($newSupplier, $key, '空');
                $content = array_get($columnMap, $key) . '由 [ ' . $oldValue . ' ] 改成 [ ' . $newValue . ' ];';
                $result[] = $content;
            } else {
                if ($key == 'sku_upload_ruler') {
                    $oldValue = array_get($oldSupplier, $key, '空');
                    $newValue = array_get($newSupplier, $key, '空');
                    $rulerService = new SupplierSkuUploadRulerService();
                    $oldValue = $rulerService->getSkuUploadRulerDesc($oldValue);
                    $newValue = $rulerService->getSkuUploadRulerDesc($newValue);
                    $content = 'Sku上传规则由 [ ' . $oldValue . ' ] 改成 [ ' . $newValue . ' ];';
                    $result[] = $content;
                }
                if ($key == 'sku_audit_ruler') {
                    $rulerService = new SupplierSkuAuditRulerService();
                    $newValue = $rulerService->getSkuAuditRulerDesc($newSupplier['sku_audit_ruler']);
                    $oldValue = $rulerService->getSkuAuditRulerDesc($oldSupplier['sku_audit_ruler']);
                    $content = 'Sku审核规则由 [ ' . $oldValue . ' ] 改成 [ ' . $newValue . ' ];';
                    $result[] = $content;
                }
                if ($key == 'qualification_photos') {
                    $oldFiles = json_decode($oldSupplier['qualification_photos'], true);
                    $oldFileNames = array_map(function ($file) {
                        return $file['file_name'];
                    }, $oldFiles);
                    $newFiles = json_decode($newSupplier['qualification_photos'], true);
                    $newFileNames = array_map(function ($file) {
                        return $file['file_name'];
                    }, $newFiles);
                    //对比文件名变化
                    $diffKeys = array_keys(array_diff_assoc($newFileNames, $oldFileNames));
                    $content = '';
                    foreach ($diffKeys as $key) {
                        $oldFileName = array_get($oldFileNames, $key);
                        $oldFileName = $oldFileName == '选择文件上传' ? ' ' : $oldFileName;
                        $newFileName = array_get($newFileNames, $key);
                        if ($newFileName == "选择文件上传") {
                            continue;
                        }
                        $content .= array_get(config('fixed.FileNameMapping'),
                                $key) . '由 [ ' . $oldFileName . ' ] 修改为 [' . $newFileName . ']; ';
                    }
                    $result[] = $content;
                }
                if ($key == 'extra_fee') {
                    $oldFee = json_decode($oldSupplier['extra_fee'], true);
                    $newFee = json_decode($newSupplier['extra_fee'], true);
                    $content = "采购附加费由 [商品总价不满" . $oldFee['cn']['max'] . "元,收取" . $oldFee['cn']['price'] . "元;商品总价不满" .
                        $oldFee['hk']['max'] . "美金,收取" . $oldFee['hk']['price'] .
                        "元;] 修改为 [商品总价不满" . $newFee['cn']['max'] . "元,收取" . $newFee['cn']['price'] . "元;商品总价不满" .
                        $newFee['hk']['max'] . "美金,收取" . $newFee['hk']['price'] . "元;]";
                    $result[] = $content;
                }
            }
            $result = array_unique($result);
        }
        return $result;
    }


    //获取修改联系人的变化内容
    public function getContactDesc($contact)
    {
        $desc = '';
        if (!empty($contact)) {
            $contact = json_decode($contact, true);
            //更新
            if (!empty($contact['old_contact']) && !empty($contact['new_contact'])) {
//                $diffCols = array_diff($contact['old_contact'], $contact['new_contact']);
                $oldContent = $this->contactDesc($contact['old_contact']);
                $newContent = $this->contactDesc($contact['new_contact']);
                return $oldContent . ' 修改为 ' . $newContent;
            }
            //新增
            if (empty($contact['old_contact']) && !empty($contact['new_contact'])) {
                $newContent = $this->contactDesc($contact['new_contact']);
                return $newContent;
            }
            //删除
            if (!empty($contact['old_contact']) && empty($contact['new_contact'])) {
                $oldContent = $this->contactDesc($contact['old_contact']);
                return $oldContent;
            }
        }
        return $desc;
    }

    private function contactDesc($contact)
    {
        $cloNameMap = [
            'supplier_consignee' => '联系名称',
            'supplier_telephone' => '电话号码',
            'supplier_fax' => '传真',
            'supplier_qq' => 'QQ',
            'supplier_mobile' => '联系方式',
            'supplier_email' => '邮箱',
            'supplier_position' => '职位',
            'can_check_uids' => '采购',
        ];
        $desc = '';
        foreach ($contact as $key => $value) {
            $colName = array_get($cloNameMap, $key);
            if (empty($colName)) {
                continue;
            }
            if ($key == 'can_check_uids') {
                $service = new AdminUserService();
                $user = $service->getAdminUserInfoByCodeId($value);
                $value = array_get($user, 'name');
            }
            $desc .= $colName . ' : ' . $value . ' | ';
        }

        return $desc;
    }


}