<?php

namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Model\PaymentDaysModel;
use App\Model\Pcb\PcbOrderModel;
use App\Model\Pcb\PcbPublicModel;
use App\Model\Pcb\PcbPurchaseModel;
use App\Model\Pcb\PcbServerModel;
use App\Model\KefuModel;
use App\Model\CmsModel;
use App\Model\OrderItemsTrackModel;
use App\Model\UserSampleApplyModel;
use App\Model\UserSampleInviteModel;
use App\Model\OrderItemsModel;
use App\Model\UserGroupModel;
use App\Model\BrandBlackListModel;
use App\Model\PayExtendModel;
use Illuminate\Support\Facades\Redis;
use App\Model\ShoppingCartModel;

class ApiController extends Controller
{
    public function Entrance(Request $request, $id ){
        $this->$id($request, $id);
    }

    private function Export($errcode=0,$errmsg='成功',$data=''){
        if(is_array($errcode)){
            ErrorLog($errcode[0],$errcode[1]);
            echo json_encode(['errcode'=>$errcode[0],'errmsg'=>$errcode[1],'data'=>!empty($errcode[2])?$errcode[2]:'']);
            exit();
        }else{
            ErrorLog($errcode,$errmsg);
            echo json_encode(['errcode'=>$errcode,'errmsg'=>$errmsg,'data'=>$data]);
            exit();
        }
    }

    private function ExportLayui($errcode=0,$errmsg=0,$data=[],$count=0,$total=''){
        if(is_array($errcode)){
            ErrorLog($errcode[0],$errcode[1]);
            echo json_encode(['code'=>$errcode[0],'msg'=>$errcode[1],'data'=>$errcode[2],'count'=>$errcode[3],'total'=>!empty($errcode[4])?$errcode[4]:'']);
        }else{
            ErrorLog($errcode,$errmsg);
            echo json_encode(['code'=>$errcode,'msg'=>$errmsg,'data'=>$data,'count'=>$count,'total'=>$total]);
        }
        exit();
    }

    private function ApiPaymentDaysList(){
        $Model=new PaymentDaysModel();
        $this->ExportLayui($Model->ApiPaymentDaysList());
    }

    private function ApiAuthPaymentDays($request){
        $Model=new PaymentDaysModel();
        $this->Export($Model->ApiAuthPaymentDays($request->user->userId));
    }
    //pcb订单列表
    private function ApiPcbOrderList($request){
        $this->ExportLayui((new PcbOrderModel())->getList());
    }
    //pcb订单列表导出
    private function ApiPcbOrderListExport($request){
        ((new PcbOrderModel())->export());
    }
    //pcb客服点击确定发货
    private function ApiSendStock($request){
        $this->Export((new PcbPublicModel())->orderShipping($request->user->userId,$request->all()));
    }
    //pcb客服点击转采购
    private function ApiAddPurchase($request){
        echo (new PcbServerModel())->AddPurchase($request->user->userId,$request->input("order_id"));
    }
    //pcb客服审核订单,反馈给前台
    private function ApiAuditOrder($request){
        $this->Export((new PcbPublicModel())->auditOrder($request->user->userId,$request->input("order_id"),$request->input("order_sn"),$request->input("content")));
    }
    //pcb订单列表
    private function ApiPcbPurchaseList($request){
        $this->ExportLayui((new PcbPurchaseModel())->getList());
    }
    //pcb订单列表导出
    private function ApiPcbPurchaseListExport($request){
        ((new PcbPurchaseModel())->export());
    }
    //pcb后台点击采购确认
    private function ApiConfirmOrder($request){
       echo  (new PcbServerModel())->confirmOrder($request->user->userId,$request->input("purchase_id"),$request->input("status"));
    }
    //pcb后台点击采购确认
    private function ApiOfflinePay($request){
        echo  (new PcbServerModel())->offlinePay($request->user->userId,$request->input("order_id"),$request->input("pay_money"));
    }
    //pcb后台点击采购确认
    private function ApiSetOrderProduct($request){
        echo  (new PcbServerModel())->setOrdserProduct($request->user->userId,$request->input("purchase_id"));
    }

    // 获取客服池
    public function ApiKefuList($request)
    {   
        $KefuModel = new KefuModel;
        $this->ExportLayui($KefuModel->lists($request));
    }

    // 新增客服
    public function ApiAddKefu($request)
    {
        $KefuModel = new KefuModel;
        $this->Export($KefuModel->add($request));
    }

    // 编辑客服
    public function ApiEditKefu($request)
    {
        $KefuModel = new KefuModel;
        $this->Export($KefuModel->edit($request));
    }

    // 删除客服
    public function ApiDelKefu($request)
    {
        $KefuModel = new KefuModel;
        $this->Export($KefuModel->del($request));
    }

    // 置顶客服
    public function ApiTopKefu($request)
    {
        $KefuModel = new KefuModel;
        $this->Export($KefuModel->top($request));
    }

    // 获取订单明细
    public function getOrderItems($request)
    {
        $order_id = $request->input('order_id');

        $url = Config('website.api_domain').'order/getOrderDetails';

        $data['k1'] = time();
        $data['k2'] = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');

        $userData = array("order_id"=>$order_id, "type"=>3, "k1"=>$data['k1'], "k2"=>$data['k2']);

        $resp = json_decode(curlApi($url, $userData, "POST"), true);

        $this->Export(0, '',  $resp['data']['order_items_info']);
    }

    // 获取订单跟踪
    public function getOrderItemsTrack($request)
    {
        $rec_id = $request->input('rec_id'); 

        $OrderItemsTrackModel = new OrderItemsTrackModel;
        $track = $OrderItemsTrackModel->getLastItemTrack($rec_id);

        if (!$track) $this->Export(1, '无跟踪明细');

        $data = $track['track_content'].',数量:'.$track['track_num'];

        $this->Export(0, '',  $data);
    }

    // 获取自营样片领取列表
    public function ApiSelfSampleList($request)
    {
        $UserSampleApplyModel = new UserSampleApplyModel;
        $this->ExportLayui($UserSampleApplyModel->lists($request));
    }

    // 获取自营样片领取记录
    public function ApiSelfSampleApplyLog($request)
    {
        $UserSampleApplyModel = new UserSampleApplyModel;
        $this->ExportLayui($UserSampleApplyModel->applyLog($request));
    }

    // 获取自营样片邀约记录
    public function ApiSelfSampleInviteLog($request)
    {
        $UserSampleInviteModel = new UserSampleInviteModel;
        $this->ExportLayui($UserSampleInviteModel->lists($request));
    }

    /*
        修改订单详情
    */
    public function update_order_items($request)
    {

        // $OrderItemsModel = new OrderItemsModel();

        $data['order_id']    = $request->input('order_id');
        $data['operator_id'] = $request->user->userId;
        $data['id']          = $request->input('id');
        $data['remarks']     = $request->input('remarks');
        $data['buyer_id']    = $request->input('buyer_id');//采购id
        $data['batch']       = $request->input('batch');//批次

        // if($data['buyer_id'] == -1){
        //     unset($data['buyer_id']);
        // }


        // $result = $OrderItemsModel->updateData($data);

        // if($result !== false){
        //     $this->Export(0, '编辑明细成功');
        // }else{
        //     $this->Export(1, '编辑明细失败');
        // }

        $url = Config('website.api_domain').'order/updateorderitems';

        $data['k1'] = time();
        $data['k2'] = md5(md5($data['k1']).'fh6y5t4rr351d2c3bryi');

        $temp = json_decode(curlApi($url, $data, "POST"), true); // 连接API

        $this->Export($temp['err_code'], $temp['err_msg']);
    }

    /*
        检查内部系统用户是否存在
    */
    public function check_user_exists($request){

         $CmsModel = new CmsModel();

         $userName = $request->input('user');

         $user_info = $CmsModel->getUserInfo(array('name'=>$userName));

        if($user_info){
            $this->Export(1, 'success',$user_info['userId']);
        }else{
            $this->Export(-1, 'error');
        }
    }

    // 获取团购信息
    public function ApiGroupList($request)
    {
        $UserGroupModel = new UserGroupModel;
        $this->ExportLayui($UserGroupModel->lists($request));
    }

    // 获取品牌黑名单
    public function ApiBrandBlackList($request)
    {
        $BrandBlackListModel = new BrandBlackListModel;
        $this->ExportLayui($BrandBlackListModel->lists($request));
    }

    // 新增/编辑品牌黑名单
    public function ApiSetBrandBlackList($request) 
    {
        $BrandBlackListModel = new BrandBlackListModel;
        $this->Export($BrandBlackListModel->setBlackList($request));
    }

    // 删除品牌黑名单
    public function ApiDelBrandBlackList($request) 
    {
        $BrandBlackListModel = new BrandBlackListModel;
        $this->Export($BrandBlackListModel->delBlackList($request));
    }

    // 启用/禁用品牌黑名单
    public function ApiActionBrandBlackList($request) 
    {
        $BrandBlackListModel = new BrandBlackListModel;
        $this->Export($BrandBlackListModel->action($request));
    }

    // 自营申请收款
    public function ajaxApplyPaid($request) 
    {
        $PayExtendModel = new PayExtendModel;
        $this->Export($PayExtendModel->setPay($request));
    }

    // 获取品牌库列表
    public function getStandardBrandList($request)
    {
        $standard_brand_name = $request->input('standard_brand_name', '');

        // 搜索指定品牌
        if ($standard_brand_name) {
            $res = $this->apiStandardBrandList($standard_brand_name);

            $this->ExportLayui(0, '', $res['data'], count($res['data']));
        }
        
        $s_key = Config('config.s_standard_brand');
        $data = Redis::get($s_key);

        // 无缓存情况下
        if (!$data) {
            $res = $this->apiStandardBrandList();
            $data = json_encode($res['data']);

            $expire = Config('config.s_standard_brand_expire');
            Redis::setex($s_key, $expire, $data);
        }

        $data = json_decode($data, true);

        $this->ExportLayui(0, '', $data, count($data));
    }

    public function apiStandardBrandList($standard_brand_name='')
    {
        $url = Config('config.footstone_url').'/AuthApi/get_scm_brand_list';
        $key = Config('config.auth_key');

        $standard_brand_name && $map['erp_brand_name'] = $standard_brand_name;

        $map['time']     = time();
        $map['AuthSign'] = MD5(MD5(http_build_query($map)) . $key);

        $data['data'] = $map;

        return json_decode(curlApi($url, $data, 'post'), true);
    }

    // 绑定品牌
    public function apiBindStandardBrand($request)
    {
        $type            = $request->input('type', 1);
        $cart_id         = $request->input('cart_id', 0);
        $curr_brand_id   = $request->input('curr_brand_id', 0);
        $curr_brand_name = $request->input('curr_brand_name', '');
        $scm_brand_id    = $request->input('scm_brand_id', 0);
        $scm_brand_name  = $request->input('scm_brand_name', '');

        if (!$scm_brand_id) $this->Export(1, '参数缺失');

        if ($type == 1 && !$cart_id) $this->Export(1, '当前行购物车ID缺失');

        $url = Config('config.footstone_url').'/AuthApi/binding_scm_brand';
        $key = Config('config.auth_key');

        $map['time']         = time();
        $map['scm_brand_id'] = $scm_brand_id;
        $map['brand_id']     = [$curr_brand_id];
        $map['brand_name']   = [$curr_brand_name];
        $map['admin_id']     = $request->user->userId;
        $map['admin_name']   = $request->user->name;
        $map['AuthSign']     = MD5(MD5(http_build_query($map)) . $key);

        $data['data'] = $map;

        $res = json_decode(curlApi($url, $data, 'post'), true);
        
        if ($res['errcode'] != 0) $this->Export($res['errcode'], $res['errmsg']);

        $save = [];
        $save['standard_brand_id']   = $scm_brand_id;
        $save['standard_brand_name'] = $scm_brand_name;

        // 将标准品牌添加到购物车
        if ($type == 1) {
            $ShoppingCartModel = new ShoppingCartModel;
            $res = $ShoppingCartModel->where('cart_id', $cart_id)->update($save);

            if ($res === false) $this->Export(1, '更新标准品牌失败');
        } 
        
        $this->Export(0, '更新标准品牌成功');
    }


}