<?php


namespace app\api\controller;

use app\api\model\Category;
use app\api\model\Goods;
use app\api\model\GoodsSpec;
use app\api\model\GoodsSpecRel;
use app\common\controller\Api;
use think\Config;
use think\Db;

/**
 * 分类页面
 */
class Classification extends Api
{
    protected $noNeedLogin = ['*'];
    protected $noNeedRight = ['*'];

    /**
     * @ApiTitle    (分类列表)
     * @ApiSummary  (分类按钮页面左侧分类列表 其他页面切换到分类页面id不传值 分类页面点击分类id传值 后台返回高亮显示)
     * @ApiMethod   (POST)
     * @ApiParams   (name=id, type=integer, required=false, description="分类id")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    'data':[
    {
    "id": 4,
    "name": "电子产品",
    "is_myself": "0", 0不高亮1高亮
    "image_text": ""
    },
    {
    "id": 6,
    "name": "水果",
    "is_myself": "0",
    "image_text": ""
    }
    ]
    })
     */
    public function sort()
    {
        $id    = $this->request->post('id', 0);
        $model = new Category();
        $list  = $model->field('id,name')->order('weigh desc')->select();
        foreach ($list as $key => &$value) {
            $value['is_myself'] = $value['id'] == $id ? '1' : '0';
        }
        $this->success('分类列表', $list);
    }

    /**
     * @ApiTitle    (分类列表商品)
     * @ApiSummary  (分类按钮页面右侧商品列表 初次点击分类页面可不传分类id值)
     * @ApiMethod   (POST)
     * @ApiHeaders  (name=token, type=string, required=false, description="token")
     * @ApiParams   (name=sort_id, type=integer, required=false, description="分类id")
     * @ApiParams   (name=page, type=integer, required=false, description="页数")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    'data':{
    "list": {
    "total": 4, 总条数
    "per_page": 10,每页数量
    "current_page": 1,当前页
    "last_page": 1,最后一页
    "data": [
    {
    "goods_id": 21,
    "goods_name": "小米Mix3",
    "price": "100.00",
    "line_price": "1000.00",划线价
    "image_text": "图片路径",
    "stock_num": 68, 商品总库存
    }
    ]
    },
    "image": "广告图"
    }
    })
     */
    public function sortGoodsList()
    {
        $sort_id = $this->request->post('sort_id', 0);
        $page    = $this->request->post('page', 1);
        $model   = new Goods();
        if ($sort_id > 0) {
            $list = $model
                ->where('is_delete', '0')
                ->where('category_id', $sort_id)
                ->where('goods_status', '10')
                ->field('goods_id,spec_type,goods_name,image')
                ->paginate(10, false, ['page' => $page])
                ->each(function ($item, $key) {
                    if ($this->auth->isLogin()) {
                        $item['cart_number'] = Db::name('cart')
                            ->where('user_id', $this->auth->id)
                            ->where('goods_id', $item['goods_id'])
                            ->sum('number');
                    } else {
                        $item['cart_number'] = 0;
                    }
                    $goods_spec         = Db::name('litestore_goods_spec')
                        ->where('goods_id', $item['goods_id'])
                        ->find();
                    $item['price']      = $goods_spec['goods_price'];
                    $item['line_price'] = $goods_spec['line_price'];
                    //判断是否打折
                    $item['is_discount'] = 'is';
                    if ($goods_spec['goods_price'] == $goods_spec['line_price']) {
                        $item['is_discount'] = 'no';
                    }
                    $item['discount'] = $goods_spec['discount'];
                    // 总库存
                    $item->append(['stock_num']);
                });
        } else {
            $list = $model
                ->where('is_delete', '0')
                ->where('goods_status', '10')
                ->field('goods_id,goods_name,image')
                ->paginate(10, false, ['page' => $page])
                ->each(function ($item, $key) {
                    if ($this->auth->isLogin()) {
                        $item['cart_number'] = Db::name('cart')
                            ->where('user_id', $this->auth->id)
                            ->where('goods_id', $item['goods_id'])
                            ->sum('number');
                    } else {
                        $item['cart_number'] = 0;
                    }
                    $goods_spec         = Db::name('litestore_goods_spec')
                        ->where('goods_id', $item['goods_id'])
                        ->find();
                    $item['price']      = $goods_spec['goods_price'];
                    $item['line_price'] = $goods_spec['line_price'];
                    //判断是否打折
                    $item['is_discount'] = 'is';
                    if ($goods_spec['goods_price'] == $goods_spec['line_price']) {
                        $item['is_discount'] = 'no';
                    }
                    $item['discount'] = $goods_spec['discount'];
                    // 总库存
                    $item->append(['stock_num']);
                });
        }
        $this->success('分类商品列表', ['list' => $list, 'image' => cdnurl(Config::get('site.advert'), true)]);
    }

    /**
     * @ApiTitle    (商品规格)
     * @ApiMethod   (POST)
     * @ApiParams   (name=goods_id, type=integer, required=true, description="商品id")
     * @ApiReturn   ({
    'code':'1',
    'msg':'返回成功'
    'data':{
    // 规格组合完毕的列表
    // 如果sku是空数组 为单规格商品 只需要用list的值
    "list": [
    {
    "goods_spec_id": 103,  // 规格列表id
    "goods_id": 22,
    "goods_no": "SNHW001",
    "goods_price": "4499.00",
    "line_price": "0.00",
    "stock_num": 941,  // 库存
    "goods_sales": 58,
    "goods_weight": 500,
    "spec_sku_id": "44_46", // 搜索字段 组合sku里面的id搜索 从小到大排序
    "spec_image": "",
    "create_time": 1542784591,
    "update_time": 1543242861
    }
    ],
    // 规格展示的列表
    "sku": [
    {
    "name": "颜色",
    "second": [
    {
    "id": 44,
    "name": "亮黑色"
    }
    ]
    },
    {
    "name": "内存",
    "second": [
    {
    "id": 46,
    "name": "6GB+64GB"
    }
    ]
    }
    ]
    }
    })
     */
    public function goodsSku()
    {
        $goods_id          = $this->request->post('goods_id');
        $goodsspecrelmodel = new GoodsSpecRel();
        $list              = $goodsspecrelmodel
            ->where('goods_id', $goods_id)
            ->select();
        $array             = [];
        $goods             = \app\api\model\Goods::get($goods_id);
        if ($goods['spec_type'] == 20) {
            foreach ($list as $key => $value) {
                if (!isset($array[$value['spec_id']])) {
                    $array[$value['spec_id']]['name'] = Db::name('litestore_spec')
                        ->where('id', $value['spec_id'])
                        ->value('spec_name');
                }
                $spec_value                           = Db::name('litestore_spec_value')
                    ->where('id', $value['spec_value_id'])
                    ->value('spec_value');
                $array[$value['spec_id']]['second'][] = [
                    'id'   => $value['spec_value_id'],
                    'name' => $spec_value,
                ];
            }
            $array = array_values($array);
        }
        $goods_spec = GoodsSpec::all(['goods_id' => $goods_id]);
        $this->success('商品规格', ['list' => $goods_spec, 'sku' => $array]);
    }

    /**
     * @ApiTitle    (分类商品——二开)
     * @ApiParams   (name=sort_id, type=integer, required=false, description="分类id")
     * @ApiParams   (name=page, type=integer, required=false, description="页数")
     * @ApiMethod   (POST)
     * @ApiReturn   ({
    "code": 1,
    "msg": "分类商品列表",
    "time": "1650252313",
    "data": {
    "list": {
    "total": 2,
    "per_page": 10,
    "current_page": 1,
    "last_page": 1,
    "data": [
    {
    "goods_id": 41,   //商品id
    "goods_name": "黑人超白竹炭牙膏",   //商品名称
    "image": "/uploads/20220401/ff35da0c6cd2789f1f671d8ce1600b5d.png",   //商品图
    "cart_number": 0,      //购物车数量
    "price": "9.00",      //折扣价格
    "line_price": "10.00",  //划线价
    "is_discount": "is",    //是否打折  is=打折(显示折扣) no= 未打折(不显示折扣)
    "discount": "",        //折扣
    "goods_sku_list": [     //商品sku
    {
    "goods_spec_id": 273,    //sku  id
    "goods_id": 41,          //商品id
    "goods_no": "4891338025416",    //商品编号
    "goods_price": "9.00",         //折扣价
    "line_price": "10.00",       //划线价
    "stock_num": 100,           //库存
    "goods_sales": 0,
    "goods_weight": 0.09,      //重量
    "spec_sku_id": "",
    "spec_image": "",
    "create_time": 1648795163,
    "update_time": 1648795163,
    "discount": ""            //折扣
    }
    ],
    "goods_sku": [],      //sku值
    "image_text": "http://temporaryfood.qiniu.broing.cn/uploads/20220401/ff35da0c6cd2789f1f671d8ce1600b5d.png",
    "images_text": [],
    "down_image_text": "",
    "four_image_text": [],
    "detail_image_text": [],
    "stock_num": 100
    },
    {
    "goods_id": 46,
    "goods_name": "宇宙无敌",
    "image": "/uploads/20220415/88ede89dc926c7556d4caeec2def0cb5.jpg",
    "cart_number": 0,
    "price": "150.00",
    "line_price": "150.00",
    "is_discount": "no",
    "discount": "3.3折",
    "goods_sku_list": [
    {
    "goods_spec_id": 309,
    "goods_id": 46,
    "goods_no": "wzry20220415",
    "goods_price": "150.00",
    "line_price": "150.00",
    "stock_num": 2000,
    "goods_sales": 0,
    "goods_weight": 0,
    "spec_sku_id": "2",
    "spec_image": "http://temporaryfood.qiniu.broing.cn/uploads/20220415/12ccfc9ce3ab739b7468210e1cb03b34.jpg",
    "create_time": 1650010750,
    "update_time": 1650010750,
    "discount": "3.3折"
    },
    {
    "goods_spec_id": 310,
    "goods_id": 46,
    "goods_no": "wzry20220415",
    "goods_price": "50.00",
    "line_price": "150.00",
    "stock_num": 2000,
    "goods_sales": 0,
    "goods_weight": 0,
    "spec_sku_id": "3",
    "spec_image": "http://temporaryfood.qiniu.broing.cn/uploads/20220415/4c51cd16c74d566e501b3dc32f4af563.jpg",
    "create_time": 1650010750,
    "update_time": 1650010750,
    "discount": "3.3折"
    },
    {
    "goods_spec_id": 311,
    "goods_id": 46,
    "goods_no": "wzry20220415",
    "goods_price": "50.00",
    "line_price": "150.00",
    "stock_num": 2000,
    "goods_sales": 0,
    "goods_weight": 0,
    "spec_sku_id": "4",
    "spec_image": "http://temporaryfood.qiniu.broing.cn/uploads/20220415/88ede89dc926c7556d4caeec2def0cb5.jpg",
    "create_time": 1650010750,
    "update_time": 1650010750,
    "discount": "3.3折"
    },
    {
    "goods_spec_id": 312,
    "goods_id": 46,
    "goods_no": "wzry20220415",
    "goods_price": "50.00",
    "line_price": "150.00",
    "stock_num": 2000,
    "goods_sales": 0,
    "goods_weight": 0,
    "spec_sku_id": "5",
    "spec_image": "http://temporaryfood.qiniu.broing.cn/uploads/20220415/6e3683dac095dd567fc527de8a2a7ba6.jpg",
    "create_time": 1650010750,
    "update_time": 1650010750,
    "discount": "3.3折"
    }
    ],
    "goods_sku": [
    {
    "name": "分路",
    "second": [
    {
    "id": 2,
    "name": "上路"
    },
    {
    "id": 3,
    "name": "中路"
    },
    {
    "id": 4,
    "name": "下路"
    },
    {
    "id": 5,
    "name": "打野"
    }
    ]
    }
    ],
    "image_text": "http://temporaryfood.qiniu.broing.cn/uploads/20220415/88ede89dc926c7556d4caeec2def0cb5.jpg",
    "images_text": [],
    "down_image_text": "",
    "four_image_text": [],
    "detail_image_text": [],
    "stock_num": 8000
    }
    ]
    },
    "image": "http://temporaryfood.qiniu.broing.cn/uploads/20220114/95d210316c68dcc4d4c13f5b605ca463.jpg"
    }
    })
     */
    public function goods_list()
    {
        $sort_id = $this->request->param('sort_id', 0);
        $page    = $this->request->post('page', 1);
        $model   = new Goods();
        if ($sort_id > 0) {
            $list = $model
                ->where('is_delete', '0')
                ->where('category_id', $sort_id)
                ->where('goods_status', '10')
                ->field('goods_id,spec_type,goods_name,image')
                ->paginate(10, false, ['page' => $page])
                ->each(function (&$item) {
                    if ($this->auth->isLogin()) {
                        $item['cart_number'] = Db::name('cart')
                            ->where('user_id', $this->auth->id)
                            ->where('goods_id', $item['goods_id'])
                            ->sum('number');
                    } else {
                        $item['cart_number'] = 0;
                    }
                    $goods_spec         = Db::name('litestore_goods_spec')
                        ->where('goods_id', $item['goods_id'])
                        ->find();
                    $item['price']      = round($goods_spec['goods_price'], 2);
                    $item['line_price'] = round($goods_spec['line_price'], 2);
                    //判断是否打折
                    $item['is_discount'] = 'is';
                    if (empty($goods_spec['discount'])) {
                        $item['is_discount'] = 'no';
                    }
                    $item['discount'] = $goods_spec['discount'];
                    // 总库存
                    $item->append(['stock_num']);

                    //商品sku
                    $goodsspecrelmodel = new GoodsSpecRel();
                    $list              = $goodsspecrelmodel
                        ->where('goods_id', $item['goods_id'])
                        ->select();
                    $array             = [];
                    $goods             = \app\api\model\Goods::get($item['goods_id']);
                    if ($goods['spec_type'] == 20) {
                        foreach ($list as $key => $value) {
                            if (!isset($array[$value['spec_id']])) {
                                $array[$value['spec_id']]['name'] = Db::name('litestore_spec')
                                    ->where('id', $value['spec_id'])
                                    ->value('spec_name');
                            }
                            $spec_value                           = Db::name('litestore_spec_value')
                                ->where('id', $value['spec_value_id'])
                                ->value('spec_value');
                            $array[$value['spec_id']]['second'][] = [
                                'id'   => $value['spec_value_id'],
                                'name' => $spec_value,
                            ];
                        }
                        $array = array_values($array);
                    }
                    $goods_spec = GoodsSpec::all(['goods_id' => $item['goods_id']]);
                    foreach ($goods_spec as &$spec_value) {
                        //规格下的购物车数量
                        $number = Db::name('cart')
                            ->where(['goods_id' => $spec_value['goods_id'], 'sku_id' => $spec_value['goods_spec_id'], 'user_id' => $this->auth->id])
                            ->value('number');

                        $spec_value['cart_number'] = $number ?? 0;
                        //判断是否打折
                        $spec_value['is_discount'] = 'is';
                        if (empty($spec_value['discount'])) {
                            $spec_value['is_discount'] = 'no';
                        }
                    }
                    $item['goods_sku_list'] = $goods_spec;
                    $item['goods_sku']      = $array;
                });
        } else {
            $list = $model
                ->where('is_delete', '0')
                ->where('goods_status', '10')
                ->field('goods_id,goods_name,spec_type,image')
                ->paginate(10, false, ['page' => $page])
                ->each(function (&$item) {
                    if ($this->auth->isLogin()) {
                        $item['cart_number'] = Db::name('cart')
                            ->where('user_id', $this->auth->id)
                            ->where('goods_id', $item['goods_id'])
                            ->sum('number');
                    } else {
                        $item['cart_number'] = 0;
                    }
                    $goods_spec         = Db::name('litestore_goods_spec')
                        ->where('goods_id', $item['goods_id'])
                        ->find();
                    $item['price']      = round($goods_spec['goods_price'], 2);
                    $item['line_price'] = round($goods_spec['line_price'], 2);
                    //判断是否打折
                    $item['is_discount'] = 'is';
                    if (empty($goods_spec['discount'])) {
                        $item['is_discount'] = 'no';
                    }
                    $item['discount'] = $goods_spec['discount'];
                    // 总库存
                    $item->append(['stock_num']);

                    //商品sku
                    $goodsspecrelmodel = new GoodsSpecRel();
                    $list              = $goodsspecrelmodel
                        ->where('goods_id', $item['goods_id'])
                        ->select();
                    $array             = [];
                    $goods             = \app\api\model\Goods::get($item['goods_id']);
                    if ($goods['spec_type'] == 20) {
                        foreach ($list as $key => $value) {
                            if (!isset($array[$value['spec_id']])) {
                                $array[$value['spec_id']]['name'] = Db::name('litestore_spec')
                                    ->where('id', $value['spec_id'])
                                    ->value('spec_name');
                            }
                            $spec_value                           = Db::name('litestore_spec_value')
                                ->where('id', $value['spec_value_id'])
                                ->value('spec_value');
                            $array[$value['spec_id']]['second'][] = [
                                'id'   => $value['spec_value_id'],
                                'name' => $spec_value,
                            ];
                        }
                        $array = array_values($array);
                    }
                    $goods_spec = GoodsSpec::all(['goods_id' => $item['goods_id']]);
                    foreach ($goods_spec as &$spec_value) {

                        //规格下的购物车数量
                        $number = Db::name('cart')
                            ->where(['goods_id' => $spec_value['goods_id'], 'sku_id' => $spec_value['goods_spec_id'], 'user_id' => $this->auth->id])
                            ->value('number');

                        $spec_value['cart_number'] = $number ?? 0;
                        //判断是否打折
                        $spec_value['is_discount'] = 'is';
                        if (empty($spec_value['discount'])) {
                            $spec_value['is_discount'] = 'no';
                        }
                    }
                    $item['goods_sku_list'] = $goods_spec;
                    $item['goods_sku']      = $array;
                });
        }
        $this->success('分类商品列表', ['list' => $list, 'image' => cdnurl(Config::get('site.advert'), true)]);

    }

    /**
     * @ApiTitle    (商品分类——二开)
     * @ApiMethod   (POST)
     * @ApiReturn   ({
    "code": 1,
    "msg": "ok",
    "time": "1650251148",
    "data": [
    {
    "id": 22,   //分类id
    "name": "RIO 3度白桃白兰地味鸡尾酒",  //分类名称
    "category_cart_number": 0,      //该分类下的用户加入购物车的数量,未登录时为0
    "image_text": ""
    },
    {
    "id": 21,
    "name": "冷制品",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 20,
    "name": "饮料",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 13,
    "name": "悠闲零食",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 14,
    "name": "酒水",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 15,
    "name": "乳品烘培",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 16,
    "name": "粮油调味",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 17,
    "name": "生活百货",
    "category_cart_number": 0,
    "image_text": ""
    },
    {
    "id": 19,
    "name": "日化类",
    "category_cart_number": 0,
    "image_text": ""
    }
    ]
    })
     */
    public function category_list()
    {
        $model = new Category();
        $list  = $model->field('id,name')->order('weigh desc')->select();
        foreach ($list as $key => &$value) {
            $model = new Goods();
            if ($this->auth->isLogin()) {
                $goods_list = $model
                    ->where('is_delete', '0')
                    ->where('category_id', $value['id'])
                    ->where('goods_status', '10')
                    ->field('goods_id')
                    ->select()->toArray();
                //如果该分类下没商品,则分类下购物车数量为零
                if (empty($goods_list)) {
                    $value['category_cart_number'] = 0;
                    continue;
                }
                foreach ($goods_list as &$item) {
                    $value['category_cart_number'] = Db::name('cart')
                        ->where('user_id', $this->auth->id)
//                        ->where('goods_id', $item['goods_id'])
                        ->where('category_id', $value['id'])
                        ->sum('number');
                }
            } else {
                $value['category_cart_number'] = 0;
            }
        }
        $this->success('ok', $list);


    }
}