<?php
namespace app\modules\logic\services;
use app\modules\common\Helper;
use app\modules\logic\model\OrderModel;
use app\modules\logic\model\OrderInfoModel;
use app\modules\logic\model\UsersCouponModel;
use app\modules\logic\model\CouponListModel;
use app\modules\logic\services\AccountService;
use Yii;
use yii\db\Query;
use yii\db\Expression;
/**
 * 优惠劵公用服务
 */
class CouponService {
	/**
	 * [getUseCou 获取可用优惠券]
	 * @return [type] [description]
	 */
	public static function getUseCou($user_id = 0){
		if(empty($user_id)) return false;
		//获取账户信息
		$account = AccountService::getAccount($user_id);
		//获取支付账号的user_id
		$have_user_id = isset($account['account']['user_id'])?$account['account']['user_id']:0;
		if(empty($have_user_id)) return false;
		$conn = Yii::$app->db;
		$_where = " and p1.user_id= ".$have_user_id." and p1.is_used = 0 and p2.star_valid<=".time()." and p2.end_valid>=".time();

        $sql = "select p1.id,p1.user_id,p1.code,p1.cid,p2.name from {{%users_coupon}} as p1 left join {{%coupon_list}} as p2  on p1.cid=p2.id where 1 " . $_where;
        $cmd = $conn->createCommand($sql);
        $rows = $cmd->queryAll();
		return ['total'=>!empty($rows)?count($rows):0,'list'=>$rows];
	}

	public static function getUseCouByOrder($user_id = 0,$order_id = 0){
		if(empty($user_id)) return false;
		//获取账户信息
		$account = AccountService::getAccount($user_id);
		//获取支付账号的user_id
		$have_user_id = isset($account['account']['user_id'])?$account['account']['user_id']:0;
		if(empty($have_user_id)) return false;
		$conn = Yii::$app->db;
		$_where = " and p1.user_id= ".$have_user_id." and p1.is_used = 0 and p2.star_valid<=".time()." and p2.end_valid>".time();

        $sql = "select p1.id,p1.user_id,p1.code,p1.cid,p2.money,p2.use_cn,p2.pro_extra from {{%users_coupon}} as p1 left join {{%coupon_list}} as p2  on p1.cid=p2.id where 1 " . $_where;
        $cmd = $conn->createCommand($sql);
        $data = $cmd->queryAll();
        $Order = new OrderModel();
        $OrderInfo = new OrderInfoModel();
        $row_order = $Order->getWidgetRow(['cols'=>['price'],'order_id'=>$order_id]); 
        $row_order_info = $Order->getWidgetRow(['cols'=>['pro_extra'],'order_id'=>$order_id]); 
        $order_arr = array_merge($row_order,$row_order_info);
        $conn->close();
        foreach ($data as &$value) {
        	if(!self::verCouIsA($value,$order_arr)){
        		unset($value);
        	}
        	unset($value['money']);
        	unset($value['use_cn']);
        	unset($value['pro_extra']);
        }
 		
		return ['total'=>!empty($data)?count($data):0,'list'=>$data];
	}
	/**
	 * [verCouIsA 校验优惠券是否满足使用条件]
	 * @return [type] [description]
	 */
	private static function verCouIsA($condition,$order_arr){
		//订单金额超过X才能使用
		if(!empty($condition['use_cn']) && $condition['use_cn']<$order_arr['price']){
			return false;
		}
		//参加项目校验
		if(!empty($condition['pro_extra'])){
			$v_pro_extra = json_decode($condition['pro_extra'],true);
			$pro_extra = json_decode($order_arr['pro_extra'],true);
			$res = array_diff($pro_extra,$v_pro_extra);
			if(!empty($res)){
				return false;
			}
		}
		return true;
	}
	/**
	 * [useCou 使用优惠券]
	 * use_order_id use_uid id
	 * @return [type] [description]
	 */
	public static function useCou($param = []){
		if(empty($param['id'])) return false;
		$id = $param['id'];
		$param['use_time'] = time();
		unset($param['id']);
		$UsersCoupon = new UsersCouponModel();
		return $UsersCoupon->saveUs($param,$id);
	}
	/**
	 * [backCou 退回优惠券]
	 * @apiDoc
	 * @method POST
	 * @param  integer         $order_id [description]
	 * @return [type]                    [description]
	 */
	public static function backCou($order_id = 0){
		$UsersCoupon = new UsersCouponModel();
		$rows = $UsersCoupon->getWidgetRows(['cols'=>['id'],'use_order_id'=>$order_id]);
		if(!empty($rows)){
			$cid_arr = array_column($rows, 'id');
			$param = ['is_used'=>0,'use_order_id'=>0,'use_uid'=>0,'use_time'=>0];
			return $UsersCoupon->updateAll($param, ['in', 'id', $cid_arr]);
		}
		return false;
	}
	/**
	 * [getCouPrice 获取优惠金额]
	 * @param  integer $cid [description]
	 * @return [type]       [description]
	 */
	public static function getCouPrice($cid = 0){
		if(empty($cid)) return 0;
		$CouponList = new CouponListModel();
		$UsersCoupon = new UsersCouponModel();
		$row = $UsersCoupon->getWidgetRow(['cols'=>['cid'],'id'=>$cid]);
		if(!empty($row)){
			$row_c = $CouponList->getWidgetRow(['cols'=>['money'],'id'=>$row['cid']]);
			return isset($row_c['money'])?$row_c['money']:0;
		}else{
			return 0;
		}
		
	}
	/**
	 * [getCoupon 获取劵]
	 * @name   获取新用户注册大礼包活动
	 * @return [type]          [description]
	 */
	public static function getNewCoupon($param = []){
		if(empty($param['user_id'])) return false;
		$UsersCoupon = new UsersCouponModel();

		if(!empty($param['cid']) && is_array($param['cid'])){
			foreach ($param['cid'] as $value) {
				$CouponList = (new CouponListModel())->findOne($value);
				$param_s = [
					'user_id'=>$param['user_id'],
					'cid'=>$value,
					'code'=>'NEW'.time().$value,
					'created'=>time(),
				];
				$res = $UsersCoupon->saveUs($param_s);
				if($res){
					$CouponList->updateCounters(['total' => -1]);
				}
			}
		}
		return true;
	}

}