<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use JiGuang\JSMS as JSMS;
use Illuminate\Support\Facades\Redis;
use Dingo\Api\Http\Response;
use Validator;
use DB;
use App\Models\User;
use App\Models\CartItem;

/**
 *
 * Copyright: Copyright (c) 2019 LanRu-Caifu
 *
 * @Description: 购物车控制器
 * @version: v1.0.0
 * @author: fengyichao
 * @date: 2019年8月5日 下午6:36:38
 *
 * Modification History:
 * Date         Author          Version            Description
 *---------------------------------------------------------*
 * 2019年8月5日     fengyichao           v1.0.0               修改原因
 */
class CartController extends ApiController {

	/**
	 *
	 * @api {post} cart/update 购物车-修改
	 * @apiName cart/update
	 * @apiGroup cart
	 * @apiParam {int} product_id 产品id
	 * @apiParam {int} amount  数量
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8080/api/cart/update?token=c81e728d9d4c2f636f067f89cc14862c&product_id=1&amount=2
	 * @apiPermission token 必传
	 */
	function update(Request $request) {
		$rules = [ 
				'product_id' => [ 
						'required'
				],
				'amount' => [
						'required'
				]
		];
		$validator = app ( 'validator' )->make ( $request->all (), $rules );
		if ($validator->fails ()) {
			return $this->throwErrors ( $validator );
		}
		$cartItem=CartItem::firstOrNew (  [ 
				'user_id' => $request->user_id,
				'product_id' => $request->product_id
		]);
		$cartItem->amount=$request->amount;
		$cartItem->save();
		return $this->success ();
	}
	
	/**
	 *
	 * @api {post} cart/delete 购物车-删除
	 * @apiName cart/delete
	 * @apiGroup cart
	 * @apiParam {int} product_id 产品id
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8080/api/cart/delete?token=c81e728d9d4c2f636f067f89cc14862c&product_id=40
	 * @apiPermission token 必传
	 */
	function delete(Request $request){
		$rules = [
				'product_id' => [
						'required'
				]
		];
		$condition=['user_id'=>$request->user_id,'product_id'=>$request->product_id];
		CartItem::where($condition)->delete();
		return $this->success ();
	}
	/**
	 *
	 * @api {post} cart/list 购物车-列表
	 * @apiName cart/list
	 * @apiGroup cart
	 * @apiParam {int} page 页码 default:1
	 * @apiSuccess {int}  current_page 当前页
	 * @apiSuccess {List[Map]}  data 商品列表
	 * @apiSuccess (data) {int}  product_id 商品id
	 * @apiSuccess (data) {string}  long_title 标题
	 * @apiSuccess (data) {string}  price 价格
	 * @apiSuccess (data) {string}  image 图片地址 需要前端自行拼接阿里云前缀
	 * @apiSuccess (data) {int}  amount 数量
	 * @apiSuccess {int}  current_page 当前页
	 * @apiSuccess {int}  total 总页数
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8080/api/cart/list?token=c81e728d9d4c2f636f067f89cc14862c
	 * @apiPermission token 必传
	 */
	function list(Request $request){
		$page = $request->input ( 'page', 1 );
		$carts=CartItem::rightJoin('products','product_id','products.id')->where('user_id',$request->user_id)->paginate ( 15, ['products.id as product_id','price','long_title','image','amount'], 'page', $page );		
		return $this->success ($carts);
	}
	/**
	 *
	 * @api {post} cart/create 购物车-新增
	 * @apiName cart/create
	 * @apiGroup cart
	 * @apiParam {int} product_id 产品id
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8080/api/cart/create?token=c81e728d9d4c2f636f067f89cc14862c&product_id=1
	 * @apiPermission token 必传
	 */
	function create(Request $request){
		$rules = [
				'product_id' => [
						'required'
				]
		];
		$validator = app ( 'validator' )->make ( $request->all (), $rules );
		if ($validator->fails ()) {
			return $this->throwErrors ( $validator );
		}
		$cartItem=CartItem::firstOrNew (  [
				'user_id' => $request->user_id,
				'product_id' => $request->product_id
		]);
		$cartItem->amount=$cartItem->amount+1;
		$cartItem->save();
		return $this->success ();
	}
}
