<?php

namespace App\Admin\Actions\backstage\Coupon;

use App\Models\Coupon;
use App\Models\CouponType;
use App\Models\User;
use App\Models\UserCoupon;
use Encore\Admin\Actions\BatchAction;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\Request;

class CouponBatchGrant extends BatchAction
{
    public $name = '优惠券批量发放';
    public function handle(Collection $collection,Request $request)
    {
        $coupon_id = request('id');
        //优惠券数量
        $coupon_num = request('num');
        $user_arr = $collection->toArray();
        //用户数量
        $user_num = count($user_arr);
        $coupon = Coupon::where('id',$coupon_id)->first();
        $all_num = $coupon_num*$user_num;
        //判断优惠券是否充足 优惠券数量*用户数量
        if ($coupon->num < $all_num)
        {
            return $this->response()->error('优惠券'.Coupon::where('id',$coupon_id)->value('name').'数量不足')->refresh();
        }
        for ($i = 0;$i<$coupon_num;$i++)
        {
            //获取过期类型是指定几天过期
            if ($coupon->expire_type == 1){
                $effective_days = $coupon->effective_days;
                $str_time = '+'.$effective_days.'day';
                $expire_time_num = strtotime($str_time);
                $arr = [
                    'user_id' => 0,
                    'coupon_id'=>$coupon_id,
                    'name' => $coupon->name,
                    'title' => $coupon->title,
                    'desc' => $coupon->desc,
                    'rules' => $coupon->rules,
                    'icon' => $coupon->icon,
                    'type' => $coupon->type,
                    'usable_type' => $coupon->usable_type,
                    'money' => $coupon->money,
                    'discount' => $coupon->discount,
                    'min_consume_amount' => $coupon->min_consume_amount,
                    'max_reduce_amount' => $coupon->max_reduce_amount,
                    'expire_type' => $coupon->expire_type,
                    'effective_days' => $coupon->effective_days,
                    'expire_time' => $expire_time_num,
                ];
            }else if ($coupon->expire_type == 2){
                $arr = [
                    'user_id' => 0,
                    'coupon_id'=>$coupon_id,
                    'name' => $coupon->name,
                    'title' => $coupon->title,
                    'desc' => $coupon->desc,
                    'rules' => $coupon->rules,
                    'icon' => $coupon->icon,
                    'type' => $coupon->type,
                    'usable_type' => $coupon->usable_type,
                    'money' => $coupon->money,
                    'discount' => $coupon->discount,
                    'min_consume_amount' => $coupon->min_consume_amount,
                    'max_reduce_amount' => $coupon->max_reduce_amount,
                    'expire_type' => $coupon->expire_type,
                    'start_time' => $coupon->start_time,
                    'end_time' => $coupon->end_time,
                ];
            }
            if ($coupon->usable_type == 2)
            {
                //拿到类型数组
                $type = CouponType::where('coupon_id',$coupon_id)->where('user_coupon_id',0)->pluck('product_type');
            }

            foreach ($collection as $model) {
                //插入到用户优惠券中
                $arr['user_id'] = $model->id;
                //获取到插入之后的id
                $insert_id = UserCoupon::create($arr)->id;
                if ($coupon->usable_type == 2)
                {
                    foreach ($type as $value)
                    {
                        $coupon_type_arr = [
                            'coupon_id' => 0,
                            'user_coupon_id' =>$insert_id,
                            'product_type' =>$value
                        ];
                        CouponType::create($coupon_type_arr);
                    }
                }
                $coupon = Coupon::where('id',$coupon_id)->first();
                Coupon::where('id',$coupon_id)->update(['num'=>$coupon->num-1]);
            }
        }
        return $this->response()->success('优惠券发放成功')->refresh();
    }

    public function form()
    {
        $name = Coupon::where('position_type',2)->pluck('name','id');
        $this->select('id', '优惠券名称')->options($name);
        $this->text('num', '优惠券数量')->help('点击提交后请耐心等待，请勿再次点击提交按钮，以免造成多次发放');
    }
}