<?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']);
        }
    }
}