<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Services\SkuService;
use App\Http\Services\SupplierContactService;
use App\Http\Services\SupplierStatisticsService;
use App\Http\Transformers\SupplierContactTransformer;
use App\Http\Validators\SupplierContactValidator;
use App\Model\RedisModel;
use App\Model\SkuUploadLogModel;
use App\Model\SupplierChannelModel;
use App\Model\SupplierContactModel;
use Illuminate\Http\Request;

//通用API,比如获取品牌列表,分类列表等
class SkuApiController extends Controller
{
    public function Entrance(Request $request, $id)
    {
        $this->$id($request, $id);
    }

    public function GetSkuList($request)
    {
        $skuService = new SkuService();
        $data = $skuService->getSkuList();
        $this->response(0, 'ok', $data['list'], $data['total']);
    }

    public function UpdateSkuStatus($request)
    {
        $map = $request->input('goods_id');
        if (empty($map) || !is_array($map)) {
            $this->response(-1, '请选择要操作的SKU', '0');
        }
        $status = $request->input('status');
        $userId = $request->cookie('oa_user_id');
        $sKey = $request->cookie('oa_skey');
        $cookie = 'oa_user_id=' . $userId . '; oa_skey=' . $sKey;
        $url = env('FOOTSTONE_URL') . '/fsapi/operation_sku_status';
        $params = [
            'goods_id' => $map,
            'status' => $status
        ];
        $params = http_build_query($params);
        $result = curl($url, $params, true, false, $cookie);
        $result = json_decode($result, true);
        if ($result['errcode'] == 0) {
            $this->response(0, '操作成功');
        } else {
            $this->response(-1, '操作失败,原因是 : ' . $result['errmsg']);
        }
    }

    //批量下架
    public function BatchOffShelf($request)
    {
        $supplierCode = $request->get('supplier_code');
        $brandId = $request->get('brand_ids');
        $brandId = str_replace(',', '', $brandId);
//        $updateTime = $request->get('update_time');
        if (empty($supplierCode)) {
            $this->response(-1, '请选择供应商');
        }
//        $startTime = $endTime = 0;
//        if ($updateTime) {
//            $updateTime = explode('~', $updateTime);
//            $startTime = $updateTime[0];
//            $endTime = $updateTime[1];
//        }

        $uploadLogId = SkuUploadLogModel::where('supplier_code', $supplierCode)
            ->where('status', SkuUploadLogModel::STATUS_HANDLED)->orderBy('id', 'desc')
            ->value('id');

        $data = [
            'supplier_code' => $supplierCode,
            'brand_id' => $brandId,
            'log_id' => $uploadLogId,
            "down_type" => 1,
        ];
        //改成队列
        (new SkuService())->batchOffShelfSkuQueue($data);
        $this->response(0, '批量下架任务已经发送,请等待任务完成,期间你可以刷新列表查看下架情况');

    }


    //批量修改内部编码
    public function batchUpdateEncoded($request)
    {
        $canal = $request->get('canal');
        $encoded = $request->get('encoded');
        if (empty($canal)) {
            $this->response(-1, '请选择供应商');
        }
        if (empty($encoded)) {
            $this->response(-1, '请选择供内部编码(采购员)');
        }
        //判断采购员是否属于该供应商
        $flag = SupplierChannelModel::where('supplier_code', $canal)->
        where('channel_uid', 'like', "%$encoded%")->exists();
        if (!$flag) {
            $this->response(-1, '选择的采购员不属于该供应商,请重新选择');
        }
        $data = [
            'canal' => $canal,
            "encoded" => $encoded,
        ];
        //改成队列
        (new SkuService())->batchUpdateEncodedQueue($data);
        $this->response(0, '批量修改内部编码任务已经发送,请等待任务完成,期间你可以刷新列表查看下架情况');

    }


    //批量上下架
    public function batchUpdateSkuStatus(Request $request)
    {
        $data = $request->only([
            'sku_ids',
            'is_long_term',
            'operate_type',
            'cp_time',
        ]);
        if ($data['operate_type'] == SkuService::OPERATE_TYPE_PUTAWAY) {
            if ($data['is_long_term'] == -1 && empty($data['cp_time'])) {
                $this->response(-1, '请设置上架有效期');
            }
        }

        (new SkuService())->batchUpdateSkuStatus($data);
        $this->response(0, '操作成功,请等待后台上下架任务完成刷新查看');
    }


    //设置精选Sku
    public function SetPreferSku($request)
    {
        $prefer = $request->get('prefer');
        $skuIds = $request->input('sku_id');
        if (empty($skuIds) || !is_array($skuIds)) {
            $this->response(-1, '请选择要操作的SKU', '0');
        }
        $skuService = new SkuService();
        $result = $skuService->setPreferSku($skuIds, $prefer);
        if ($result) {
            $this->response(0, '操作成功');
        } else {
            $this->response(-1, '操作失败,原因是 : ' . $result['errmsg']);
        }
    }

    public function syncErpRate($request)
    {
        $url = 'http://crons.ichunt.net/ajax/quickExecTask';
        $data = [
            'id' => '62a94bc6be29d122655f4782',
            'job_name' => '基石同步ERP美金汇率',
            'job_list[172.18.137.41][job_etcd_name]' => '83a44badeda8b393d0cceddf436d9206',
            'job_list[172.18.137.41][etcd_key]' => '/cron/jobs/172.18.137.41/基石同步ERP美金汇率',
            'command' => '/data2/ichunt-cron/crons/footstone_sync_rate.sh',
        ];
        $userId = $request->cookie('oa_user_id') ?: $request->header('oa_user_id');
        $skey = $request->cookie('oa_skey') ?: $request->header('oa_skey');
        $cookie = 'oa_user_id=' . $userId . '; oa_skey=' . $skey;
        $result = curl($url, $data, true, 1, $cookie);
        $result = json_decode($result, true);
        if (!empty($result) && $result['err_code'] == 0) {
            $this->response(0, '请求同步成功');
        }
        $this->response(-1, '请求同步失败,请联系管理员');
    }

    //批量新增标签
    public function BatchAddSkuTag($request)
    {
        $skuIds = $request->get('sku_ids');
        $skuTags = $request->get('sku_tags');
        (new SkuService())->batchAddSkuTags($skuIds, $skuTags);
        $this->response(0, '设置标签成功');
    }

    //获取所有系统标签
    public function GetSystemTagList($request)
    {
        $skuService = new SkuService();
        $data = $skuService->getSystemTags();
        $this->response(0, 'ok', $data, count($data));
    }
}