<?php

namespace App\Http\Controllers;

use App\Http\Services\AdminUserService;
use App\Http\Services\LogService;
use App\Http\Services\RoleService;
use App\Http\Services\SupplierContactService;
use App\Http\Services\SupplierService;
use App\Http\Services\SupplierStatisticsService;
use App\Http\Services\ViewCheckService;
use App\Http\Transformers\LogTransformer;
use App\Http\Transformers\SupplierTransformer;
use App\Model\IntracodeModel;
use App\Model\LogModel;
use App\Model\SupplierChannelModel;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class SupplierController extends Controller
{
    public function info(Request $request, $id = '')
    {
        {
            if ($request->path() == '/') {
                $path = 'web/index';
            } else {
                $path = $request->path();
            }

            $this->data = [
                'menus' => $request->menus,
                'header' => $request->user->header,
                'username' => $request->user->email,
                'user_email' => $request->user->email,
                'uri' => '/' . $path,
                'id' => $id
            ];

            $userId = $request->user->userId;
            $canAudit = perm($userId, 'AuditSupplier');
            $this->data['canAudit'] = $canAudit;
            //把是否是领导查看放到模板,用来区分部门老大能干的权限
            $leaderView = perm($userId, 'LeaderView');
            $this->data['leaderView'] = $leaderView;

            return $this->$id($request);
        }
    }

    public function __call($name, $arr)
    {
        $data['errinfo'] = '访问路径错误';
        return view('errors.error', $data);
    }

    //供应商列表
    public function SupplierList($request)
    {
        $intracodeModel = new IntracodeModel();
        $this->data['userCodes'] = $intracodeModel->getSampleEncode();
        $this->data['users'] = $intracodeModel->getAdminUserAndCode();
        $supplierStatisticsService = new SupplierStatisticsService();
        $statistics = $supplierStatisticsService->getSupplierListStatistics();
        $this->data['statistics'] = $statistics;
        $this->data['validPerms'] = [];
        return $this->view('供应商列表');
    }

    //供应商详情
    public function SupplierDetail($request)
    {
        $supplierId = $request->get('supplier_id');
        $supplierService = new SupplierService();
        $supplier = $supplierService->getSupplier($supplierId);
        if (empty($supplier)) {
            return '供应商不存在';
        }
        //记录查看日志(1个小时内查看的跳过)
        $logModel = new LogModel();
        $lastViewAddTime = $logModel->where('supplier_id', $supplierId)->where('admin_id', $request->user->userId)
            ->where('type', LogModel::VIEW_OPERATE)->orderBy('id', 'desc')->value('add_time');
        $oneHourTimestamp = 3600;
        if (time() - $lastViewAddTime > $oneHourTimestamp) {
            $logService = new LogService();
            $logService->AddLog($supplierId, LogModel::VIEW_OPERATE, '查看', '查看供应商详情');
        }
        $this->data['operate'] = 'detail';
        $this->data['supplier'] = $supplier;
        $this->data['address'] = $supplierService->getAddress($supplierId);
        return $this->view('供应商详情');
    }

    //添加供应商
    public function AddSupplier($request)
    {
        $supplierId = $request->get('supplier_id');
        $supplierService = new SupplierService();
        $intracodeModel = new IntracodeModel();
        $this->data['outside_contact_status'] = Config('fixed.OutsideContactStatus');
        $this->data['outside_contact_type'] = Config('fixed.OutsideContactType');
        $userCodes = $intracodeModel->getSampleEncode();
        $this->data['userCodes'] = $userCodes;
        $this->data['user'] = $userCodes;
        $this->data['purchase_users'] = [];
        foreach ($userCodes as $userId => $code) {
            $this->data['purchase_users'][] = [
                'name' => $code,
                'value' => $userId,
            ];
        }
        $this->data['operate'] = 'add';
        //编辑
        if (!empty($supplierId)) {
            $this->data['title'] = '编辑供应商';
            $this->data['supplierInfo'] = $supplierService->getSupplier($supplierId);
            $DB = DB::connection('yunxin');
            $supplierAccountInfo = $DB->table('supplier_account')->where("supplier_com_id", "=",
                $supplierId)->select('mobile', "password_raw")->first();
            $this->data['supplier_account_info'] = $supplierAccountInfo;
            $this->data['address'] = $supplierService->getAddress($supplierId);
        } else {
            $this->data['title'] = '添加供应商';
        }

        return $this->view('新增供应商');
    }

    //编辑供应商
    public function UpdateSupplier($request)
    {
        $intracodeModel = new IntracodeModel();
        $userCodes = $intracodeModel->getSampleEncode();
        $this->data['userCodes'] = $userCodes;
        $this->data['user'] = $userCodes;
        $this->data['purchase_users'] = [];
        $this->data['operate'] = 'update';
        foreach ($userCodes as $userId => $code) {
            $this->data['purchase_users'][] = [
                'name' => $code,
                'value' => $userId,
            ];
        }
        //编辑
        $this->data['title'] = '编辑供应商';
        $supplierId = $request->get('supplier_id');
        $supplierService = new SupplierService();
        $supplier = $supplierService->getSupplier($supplierId);
        if (empty($supplier)) {
            return '供应商不存在';
        }
        $this->data['supplier'] = $supplier;
        $this->data['address'] = $supplierService->getAddress($supplierId);
        return $this->view('编辑供应商');
    }

    //审核供应商
    public function AuditSupplier($request)
    {
        $supplierId = $request->get('supplier_id');
        $model = new SupplierChannelModel();
        $supplier = $model->where('supplier_id', $supplierId)->first();
        //获取最后一条非分配渠道员的日志
        $logModel = new LogModel();
        $auditContent = $logModel->where('supplier_id', $supplierId)->where('action', '!=', '分配渠道开发员')
            ->where('type', '!=', 3)
            ->orderBy('id', 'desc')->first();
        $logTransformer = new LogTransformer();
        $auditContent = $logTransformer->transformInfo($auditContent);
        $this->data['auditContent'] = $auditContent;
        $this->data['supplier'] = $supplier ? $supplier->toArray() : [];
        return $this->view('审核供应商');
    }

    //分配渠道员
    public function AllocatePurchaseUser($request)
    {
        $supplierId = $request->get('supplier_id');
        $model = new SupplierChannelModel();
        $supplier = $model->where('supplier_id', $supplierId)->first();
        $supplier = $supplier ? $supplier->toArray() : [];
        $transformer = new SupplierTransformer();
        $supplier = $transformer->transformInfo($supplier);
        $this->data['supplier'] = $supplier;
        $intracodeModel = new IntracodeModel();
        $this->data['userCodes'] = $intracodeModel->getPurchaseUserCodes();
        $logModel = new LogModel();
        $this->data['logs'] = $logModel->where('supplier_id', $supplierId)
            ->where('action', '分配渠道开发员')->orderBy('id', 'desc')
            ->limit(10)->get();
        return $this->view('审核供应商');
    }

    //操作日志列表
    public function LogList($request, $data)
    {
        $intracodeModel = new IntracodeModel();
        $data['userCodes'] = $intracodeModel->getSampleEncode();
        $data['title'] = '操作日志记录';
        return view('web', $data);
    }

}