<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use JiGuang\JSMS as JSMS;
use Redis;
use App\Http\Controllers\Transformers\TeacherTransformer;
use Dingo\Api\Http\Response;
use Validator;
use App\Models\Notice;
use App\Models\Banners;
use App\Models\Goods;
use DB;
use App\Models\CutLog;
use App\Models\Cut;
use App\Services\OSS;
use Image;
class CutController extends ApiController {
	/**
	 *
	 * @api {post} cut/do 砍砍砍
	 * @apiName cut/do
	 * @apiGroup cut
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8081/api/cut/do?json=ewogICJib2R5IiA6IHsKICAgICJnb29kc19pZCIgOiA3NAogIH0sCiAgImhlYWRlciIgOiB7CiAgICAic2lnbiIgOiAiMGExMzIzZTI1ZGJlMGZiMjcyNDBjMThhNmE4NjJmMGIiLAogICAgInZlcnNpb24iIDogIjUuMS4wIiwKICAgICJjaGFubmVsIiA6ICIyIiwKICAgICJpZGZhIiA6ICIwMzNFQUU2NC0xQURGLTQ2QkQtOEU1RC05NUY4NzI0QkEwQUEiLAogICAgInRlcm1pbmFsIiA6IDEsCiAgICAidHJhbnNhY3Rpb25fdHlwZSIgOiAiaW5pdGlhbGl6ZSIsCiAgICAiY2l0eV9pZCIgOiAiMTIwMTAwIiwKICAgICJ0b2tlbiIgOiAiZWI1N2M2NzdhMjYyMDU4NTgyYmQwZjQzNTFhNDg4YjkiLAogICAgImltZWkiIDogIjcwMDMxRTkwLUIzQTgtNENDQi04Q0YwLTYwNkJFQjVGNDRDQSIsCiAgICAidGltZV9zdGFtcCIgOiAiMTU2MTM2MTY4NyIsCiAgICAiaXAiIDogIjEwMC0xMDctNC0xNTIiLAogICAgInVhIiA6ICJpUGhvbmUgNnMgUGx1cyIsCiAgICAibmV0d29ya19vcGVyIiA6ICIxIiwKICAgICJuZXR3b3JrX3N0YXR1cyIgOiAiMSIsCiAgICAiYmxhY2tfYm94IiA6ICJleUowYjJ0bGJrbGtJam9pZVhOd2NqVjBSbkZpTjBSTlFWaFNWblpFWm5GS1JVTkpNRzlNUW0xSFNscFJkbXBNY2tSdmJ6WndNM1pNU2tGUFZqZzJkV2xvVUU5WWRYQm9kbXRwUXpWMFdsaHZUVWxYYWtkYVVITkRUVkJTVVdScVZtYzlQU0lzSW05eklqb2lhVTlUSWl3aWMyVnhTV1FpT2lJeE5UVTNPVEkzTXpVM016a3lNVEEzTkRJeE1TSXNJbkJ5YjJacGJHVlVhVzFsSWpvMU1qWXNJblpsY25OcGIyNGlPaUl6TGpJdU1pSjkiLAogICAgIm1lc3NhZ2VfaWQiIDogIjIwMTkwNjI0MTUzNDQ3MTYzMDE1NjEzNjE2ODciCiAgfQp9
	 * @apiParam {int} goods_id 商品id
	 * @apiParam {int} cut_id 砍价id 非必传 如果传就是帮砍，如果不传就是发起
	 * @apiSuccess {String} cut_price 砍掉的金额
	 * @apiSuccess {Int} cut_id 砍价id
	 * @apiPermission token 必传
	 */
	function do(Request $request) {
		$goodsId = $request->goods_id;
		$userId = $request->user_id;
		$rules = [
				'goods_id' => ['required']
		];
		$validator = app('validator')->make($request->all(), $rules);
		
		if ($validator->fails ()) {
			$message='';
			foreach($validator->errors()->toArray() as $key=>$value){
				$message.=$key.':'.$value[0].',';
			}
			$message=trim($message,',');
			return $this->error ( 1000, '参数有误:' . $message );
		}
		$goods = Goods::find ( $goodsId );
		if(!$goods)
			return $this->error ( 1002, '该商品不存在' );
		$userInfo=getUserInfoByToken($request->token);
		$nickname=	$userInfo['nick_name'];
		$avatar=$userInfo['avatar'];
			
			
		if (! $request->exists ( 'cut_id' )) {
			// 发
			// 是否有进行中的
			$condition ['user_id'] = $userId;
			$condition ['status'] = 1;
			$condition ['goods_id'] = $goodsId;
			if (Cut::where ( $condition )->count ()) {
				return $this->error ( 1, '您已参加，请去详情页查看' );
			}
			if (1) {
				// new
				$rate = rand ( 60, 65 );
				$differentPrice = $goods->price - $goods->base_price;
			} else {
				// old
				if (Cut::where ( 'user_id', $userId )->count ()) {
					// 首
					$rate = rand ( 40, 50 );
				} else {
					// 非首
					$rate = rand ( 50, 55 );
				}
				$differentPrice = $goods->price - $goods->base_price;
			}

			$cutPrice = $differentPrice * $rate / 100;
			$cutData ['user_id'] = $userId;
			$cutData ['goods_id'] = $goodsId;
			$cutData ['current_price'] = $goods->price - $cutPrice;
			$cut = Cut::create ( $cutData );
			$cutLogData ['cut_id'] = $cut->id;
			$cutLogData ['cut_user_id'] = $userId;
			$cutLogData ['cut_price'] = $cutPrice;
			$cutLogData ['goods_id'] = $goodsId;
			$cutLogData ['nickname'] = $nickname;
			$cutLogData ['avatar'] = $avatar;
			CutLog::create ( $cutLogData );

			$resDate ['cut_price'] = $cutPrice;
			$resDate ['cut_id'] = $cut->id;
			return $this->success ( $resDate );
		} else {
			// 帮
			$cutId = $request->cut_id;
			$cut = Cut::find ( $cutId );
			if ($cut->user_id == $userId)
				return $this->error ( 3, '自己不能自己' );
			// 同一商品只能一次
			if (CutLog::where ( 'cut_user_id', $userId )->count ())
				return $this->error ( 2, '您已经帮过' );

			if (1) {
				// new
				$rate = rand ( 30, 35 );
				$alreadyCutPrice = CutLog::where ( 'goods_id', $goodsId )->sum ( 'cut_price' );
				$differentPrice = $goods->price - $alreadyCutPrice;
			} else {
				// old
				if (Cut::where ( 'user_id', $userId )->count ()) {
					$rate = rand ( 20, 25 );
				} else {
					$rate = rand ( 20, 30 );
				}
			}
			$alreadyCutPrice = CutLog::where ( 'cut_id', $cutId )->sum ( 'cut_price' );
			$differentPrice = $goods->price - $alreadyCutPrice;

			if ($goods->cut_num == CutLog::where ( 'cut_id', $cutId )->count () + 1) {
				// // 如果达到标准 final
				$cutPrice = $goods->price - $alreadyCutPrice - $goods->base_price;
			} else {
				$cutPrice = $differentPrice * $rate / 100;
			}

			$cut->current_price = $cut->current_price - $cutPrice;
			$cut->save ();
			$cutLogData ['cut_id'] = $cutId;
			$cutLogData ['cut_user_id'] = $userId;
			$cutLogData ['cut_price'] = $cutPrice;
			$cutLogData ['goods_id'] = $goodsId;
			
			$cutLogData ['nickname'] = $nickname;
			$cutLogData ['avatar'] = $avatar;
			CutLog::create ( $cutLogData );

			$resDate ['cut_price'] = $cutPrice;
			$resDate ['cut_id'] = $cutId;
			return $this->success ( $resDate );
		}
	}
	/**
	 *
	 * @api {post} cut/detail 砍价详情
	 * @apiName cut/detail
	 * @apiGroup cut
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8081/api/cut/detail?json=ewoJImJvZHkiOiB7CgkJImN1dF9pZCI6ICI0MyIKCX0sCgkiaGVhZGVyIjogewoJCSJzaWduIjogIjBhMTMyM2UyNWRiZTBmYjI3MjQwYzE4YTZhODYyZjBiIiwKCQkidmVyc2lvbiI6ICI1LjEuMCIsCgkJImNoYW5uZWwiOiAiMiIsCgkJImlkZmEiOiAiMDMzRUFFNjQtMUFERi00NkJELThFNUQtOTVGODcyNEJBMEFBIiwKCQkidGVybWluYWwiOiAxLAoJCSJ0cmFuc2FjdGlvbl90eXBlIjogImluaXRpYWxpemUiLAoJCSJjaXR5X2lkIjogIjEyMDEwMCIsCgkJInRva2VuIjogImViNTdjNjc3YTI2MjA1ODU4MmJkMGY0MzUxYTQ4OGI5IiwKCQkiaW1laSI6ICI3MDAzMUU5MC1CM0E4LTRDQ0ItOENGMC02MDZCRUI1RjQ0Q0EiLAoJCSJ0aW1lX3N0YW1wIjogIjE1NjEzNjE2ODciLAoJCSJpcCI6ICIxMDAtMTA3LTQtMTUyIiwKCQkidWEiOiAiaVBob25lIDZzIFBsdXMiLAoJCSJuZXR3b3JrX29wZXIiOiAiMSIsCgkJIm5ldHdvcmtfc3RhdHVzIjogIjEiLAoJCSJibGFja19ib3giOiAiZXlKMGIydGxia2xrSWpvaWVYTndjalYwUm5GaU4wUk5RVmhTVm5aRVpuRktSVU5KTUc5TVFtMUhTbHBSZG1wTWNrUnZielp3TTNaTVNrRlBWamcyZFdsb1VFOVlkWEJvZG10cFF6VjBXbGh2VFVsWGFrZGFVSE5EVFZCU1VXUnFWbWM5UFNJc0ltOXpJam9pYVU5VElpd2ljMlZ4U1dRaU9pSXhOVFUzT1RJM016VTNNemt5TVRBM05ESXhNU0lzSW5CeWIyWnBiR1ZVYVcxbElqbzFNallzSW5abGNuTnBiMjRpT2lJekxqSXVNaUo5IiwKCQkibWVzc2FnZV9pZCI6ICIyMDE5MDYyNDE1MzQ0NzE2MzAxNTYxMzYxNjg3IgoJfQp9
	 * @apiParam {int} cut_id 砍价id
	 * @apiSuccess {String} cut_id 砍价id
	 * @apiSuccess {String} avatar 头像
	 * @apiSuccess {String} goods_id 商品
	 * @apiSuccess {Map} sku  商品信息
	 * @apiSuccess (sku) {String} price  售价
	 * @apiSuccess (sku) {String} current_price  当前价格
	 * @apiSuccess (sku) {string} name 商品名称
	 * @apiSuccess (sku) {String} base_price  底价
	 * @apiSuccess (sku) {String} aleady_cut_price 已经砍掉的价格
	 * @apiSuccess (sku) {String} different_price 还差XX元  【只有type=2,4,6时才需关注】
	 * @apiSuccess (sku) {String} img_url 商品图
	 * @apiSuccess {String} avatar 最上方头像
	 * @apiSuccess {string} cut_end_time 砍价结束时间
     * @apiSuccess {List[Map]} helper_list 好友帮助列表
     * 
     * @apiSuccess (helper_list) nickname 昵称
     * @apiSuccess (helper_list) cut_price 砍掉的价格
     * @apiSuccess  {Int} type 1:发起-到底价2:发起-未到底价 3:帮砍-已帮-到底 4:帮砍-已帮-未到底价 5:帮砍-未帮-已到底价 6:帮砍-未帮-未到底价
	 * @apiPermission token 必传
	 */
	function detail(Request $request) {
		$cutId = $request->cut_id;
		$userId = $request->user_id;
		$cut = Cut::find ( $cutId );
		$goods=Goods::find($cut->goods_id);
		if ($cut->user_id == $userId){
			//自
			if($goods->base_price==$cut->current_price){
				//到底
				$type=1;
			}else{
				$type=2;
			}
		}else{
			//帮
			if (CutLog::where ( 'cut_user_id', $userId )->count ()) {
				//已帮
				if($goods->base_price==$cut->current_price){
					//到底
					$type=3;
				}else{
					$type=4;
				}
			} else {
				// 没帮
				if($goods->base_price==$cut->current_price){
					//到底
					$type=5;
				}else{
					$type=6;
				}
			}
		}
		$alreadyCutPrice = CutLog::where ( 'cut_id', $cutId )->sum ( 'cut_price' );
		$sku ['price'] = $goods->price;
		$sku ['current_price'] = number_format($goods->price - $alreadyCutPrice,2);
		$sku ['base_price'] = $goods->base_price;
		$sku ['aleady_cut_price'] = $alreadyCutPrice;
		$sku ['different_price'] = $sku ['current_price'] - $goods->base_price;
		$sku ['name'] = $goods->name;
		$sku ['img_url'] = $goods->img_url;
		$cutCondition ['cut_id'] = $cutId;
		$helperList = CutLog::select ( [ 
				'id as nickname',
				'cut_price',
				'id as avatar'  
		] )->where ( $cutCondition )->get ();
		
		
		$resData ['cut_id'] = $cutId;
		$resData ['avatar']=getUserInfoByToken($request->token)['avatar'];
		$resData ['goods_id'] = $cut->goods_id;
		$resData ['sku'] = $sku;
		$resData ['cut_end_time']=strtotime(CutLog::where ( 'cut_id', $cutId )->first()->created_at)+3600*2;
		$resData ['helper_list'] = $helperList;
		$resData ['type'] = $type;
		return $this->success ( $resData );
	}
	/**
	 *
	 * @api {post} cut/my 我的乐砍价
	 * @apiName cut/my
	 * @apiGroup cut
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8081/api/cut/my?json=ewogICJib2R5IiA6IHsKICB9LAogICJoZWFkZXIiIDogewogICAgInNpZ24iIDogIjBhMTMyM2UyNWRiZTBmYjI3MjQwYzE4YTZhODYyZjBiIiwKICAgICJ2ZXJzaW9uIiA6ICI1LjEuMCIsCiAgICAiY2hhbm5lbCIgOiAiMiIsCiAgICAiaWRmYSIgOiAiMDMzRUFFNjQtMUFERi00NkJELThFNUQtOTVGODcyNEJBMEFBIiwKICAgICJ0ZXJtaW5hbCIgOiAxLAogICAgInRyYW5zYWN0aW9uX3R5cGUiIDogImluaXRpYWxpemUiLAogICAgImNpdHlfaWQiIDogIjEyMDEwMCIsCiAgICAidG9rZW4iIDogImViNTdjNjc3YTI2MjA1ODU4MmJkMGY0MzUxYTQ4OGI5IiwKICAgICJpbWVpIiA6ICI3MDAzMUU5MC1CM0E4LTRDQ0ItOENGMC02MDZCRUI1RjQ0Q0EiLAogICAgInRpbWVfc3RhbXAiIDogIjE1NjEzNjE2ODciLAogICAgImlwIiA6ICIxMDAtMTA3LTQtMTUyIiwKICAgICJ1YSIgOiAiaVBob25lIDZzIFBsdXMiLAogICAgIm5ldHdvcmtfb3BlciIgOiAiMSIsCiAgICAibmV0d29ya19zdGF0dXMiIDogIjEiLAogICAgImJsYWNrX2JveCIgOiAiZXlKMGIydGxia2xrSWpvaWVYTndjalYwUm5GaU4wUk5RVmhTVm5aRVpuRktSVU5KTUc5TVFtMUhTbHBSZG1wTWNrUnZielp3TTNaTVNrRlBWamcyZFdsb1VFOVlkWEJvZG10cFF6VjBXbGh2VFVsWGFrZGFVSE5EVFZCU1VXUnFWbWM5UFNJc0ltOXpJam9pYVU5VElpd2ljMlZ4U1dRaU9pSXhOVFUzT1RJM016VTNNemt5TVRBM05ESXhNU0lzSW5CeWIyWnBiR1ZVYVcxbElqbzFNallzSW5abGNuTnBiMjRpT2lJekxqSXVNaUo5IiwKICAgICJtZXNzYWdlX2lkIiA6ICIyMDE5MDYyNDE1MzQ0NzE2MzAxNTYxMzYxNjg3IgogIH0KfQ==
	 * @apiParam {int} page 页码
	 * @apiSuccess {String} notice_text 顶部文案
	 * @apiSuccess {list[Map]} sku_list  砍价商品分页列表
	 * @apiSuccess (sku_list) {Int} current_page 当前页
	 * @apiSuccess (sku_list) {Int} total 总页数
	 * @apiSuccess (sku_list) {List[Map]} data 分页数据
	 * @apiSuccess (data) {string} cut_id 管理系统生成的砍价唯一id 与乐友无关
	 * @apiSuccess (data) {string} goods_id 管理系统生成的商品唯一id 与乐友无关
	 * @apiSuccess (data) {string} sku sku
	 * @apiSuccess (data) {string} name 商品名称
	 * @apiSuccess (data) {string} img_url 商品主图
	 * @apiSuccess (data) {string} status 状态 1:进行中 2:已完成 0:失败
	 * @apiSuccess (data) {string} final_price 砍成价【只有status=2时才需关注】
	 * @apiSuccess (data) {string} still_cut_price 还可砍 【只有status=1时才需关注】
	 * @apiSuccess (data) {string} distance_end_time 结束时间(时间戳) 【只有status=1时才需关注】
	 * @apiPermission token 必传
	 */
	function my(Request $request) {
		$condition ['cut.user_id'] = $request->user_id;
		// select(['cut.goods_id','goods.name','goods.img_url','status','goods.base_price'])->
		$skuList = Cut::select ( DB::raw ( "cut.id as cut_id,cut.goods_id,goods.sku,goods.img_url,goods.name,goods.base_price,cut.status,cut.final_price,cut.current_price-goods.base_price as still_cut_price,unix_timestamp(cut.created_at)+3600*2 as distance_end_time" ) )->leftJoin ( 'goods', 'cut.goods_id', 'goods.id' )->paginate ( 10 );
		$resData ['notice_text'] = '数量有限,先到先得';

		$resData ['sku_list'] = $skuList;
		return $this->success ( $resData );
	}
	/**
	 *
	 * @api {post} cut/get_qrcode 获取小程序二维码
	 * @apiName cut/get_qrcode
	 * @apiGroup cut
	 * @apiParamExample {curl} Example usage:
	 * http://59.110.137.245:8081/api/cut/get_qrcode?json=ewogICJib2R5IiA6IHsKICAgICJjdXRfaWQiIDogNTAKICB9LAogICJoZWFkZXIiIDogewogICAgInNpZ24iIDogIjBhMTMyM2UyNWRiZTBmYjI3MjQwYzE4YTZhODYyZjBiIiwKICAgICJ2ZXJzaW9uIiA6ICI1LjEuMCIsCiAgICAiY2hhbm5lbCIgOiAiMiIsCiAgICAiaWRmYSIgOiAiMDMzRUFFNjQtMUFERi00NkJELThFNUQtOTVGODcyNEJBMEFBIiwKICAgICJ0ZXJtaW5hbCIgOiAxLAogICAgInRyYW5zYWN0aW9uX3R5cGUiIDogImluaXRpYWxpemUiLAogICAgImNpdHlfaWQiIDogIjEyMDEwMCIsCiAgICAidG9rZW4iIDogImViNTdjNjc3YTI2MjA1ODU4MmJkMGY0MzUxYTQ4OGI5IiwKICAgICJpbWVpIiA6ICI3MDAzMUU5MC1CM0E4LTRDQ0ItOENGMC02MDZCRUI1RjQ0Q0EiLAogICAgInRpbWVfc3RhbXAiIDogIjE1NjEzNjE2ODciLAogICAgImlwIiA6ICIxMDAtMTA3LTQtMTUyIiwKICAgICJ1YSIgOiAiaVBob25lIDZzIFBsdXMiLAogICAgIm5ldHdvcmtfb3BlciIgOiAiMSIsCiAgICAibmV0d29ya19zdGF0dXMiIDogIjEiLAogICAgImJsYWNrX2JveCIgOiAiZXlKMGIydGxia2xrSWpvaWVYTndjalYwUm5GaU4wUk5RVmhTVm5aRVpuRktSVU5KTUc5TVFtMUhTbHBSZG1wTWNrUnZielp3TTNaTVNrRlBWamcyZFdsb1VFOVlkWEJvZG10cFF6VjBXbGh2VFVsWGFrZGFVSE5EVFZCU1VXUnFWbWM5UFNJc0ltOXpJam9pYVU5VElpd2ljMlZ4U1dRaU9pSXhOVFUzT1RJM016VTNNemt5TVRBM05ESXhNU0lzSW5CeWIyWnBiR1ZVYVcxbElqbzFNallzSW5abGNuTnBiMjRpT2lJekxqSXVNaUo5IiwKICAgICJtZXNzYWdlX2lkIiA6ICIyMDE5MDYyNDE1MzQ0NzE2MzAxNTYxMzYxNjg3IgogIH0KfQ==
	 * @apiParam {int} cut_id 砍价id
	 * @apiSuccess {String} qrcode_url 二维码完整url
	 * @apiPermission token 必传
	 */
	function getQrCode(Request $request){
		$cutId=$request->cut_id;
		$app = app('wechat.mini_program');
		$data = $app->app_code->getUnlimit('cut_id-'.$cutId, [
				'page'  => 'pages/index/main',
				'width' => 600,
		]);
		$base64   = base64_encode($data);
		$img = Image::make($base64);
		$ossKey=time().'.jpg';
		$fileFullName=public_path($ossKey);
		$img->save($fileFullName);
		
		$res=OSS::publicUpload(OSS::getBucket(), $ossKey, $fileFullName,[
				'ContentType' => 'image/jpg',
		]);
		unlink($fileFullName);
		$resData['qrcode_url']=OSS::getPublicObjectURL(OSS::getBucket(), $ossKey);
		return $this->success ( $resData );
		
		
		

	}
}
