<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019-06-12
 * Time: 17:35
 */

namespace App\Repositories\V2;

use App\Models\MemberGroup;
use App\Models\MemberGroupInfo;
use Dingo\Api\Http\Response;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Log;

class MemberGroupRepository {
    public function __construct(MemberGroup $memberGroup,MemberGroupInfo $memberGroupInfo) {
        $this->memberGroup = $memberGroup;
        $this->memberGroupInfo = $memberGroupInfo;
    }
    //列表
    public function index($request){
        $perPage = isset($request['per_page']) ? $request['per_page'] : 20;
        $where = [];
        if(isset($request['name'])){
            $where[] = ['name', 'like', "%{$request['name']}%"];
        }
        return $this->memberGroup->where($where)->paginate($perPage);
    }
    //详情
    public function view($request){
        return $this->memberGroup->where(['id'=>$request['id']])->first();
    }
    //创建
    public function create($request){
        $memberGroup = $this->memberGroup->where(['name'=>$request['name']])->first();
        if($memberGroup){
            return Response::create([
                'message'  => '该分组已存在',
                'status_code'   => 500
            ]);
        }
        $data = [
            'name' => $request['name'],
            'is_suggest' =>$request['is_suggest'],
        ];
        if(!empty($request['member_list'])){
            $member_ids = json_decode($request['member_list']);
            $count = count($member_ids);
            if($count >= 50){
                return Response::create([
                    'message'  => '推荐用户最多选50个,当前人数:'.$count.'人',
                    'status_code'   => 500
                ]);
            }
        }
        DB::beginTransaction();
        try{
            if($request['is_suggest'] == 1){
                $_memberGroup = $this->memberGroup->where(['is_suggest'=>1])->first();
                if($_memberGroup){
                    $this->memberGroup->where(['id'=>$_memberGroup->id])->update(['is_suggest'=>0]);
                }
            }
            $res  = $this->memberGroup->create($data);
            if($res){
                if($member_ids){
                    $member_data = [];
                    foreach($member_ids as $value){
                        $member_data[] = [
                            'member_group_id' => $res->id,
                            'uid' => $value->id,
                            'sort' => $value->sort,
                        ];
                    }
                    $this->memberGroupInfo->insert($member_data);
                }
            }
            DB::commit();
            return Response::create();
        }catch (QueryException $exception){
            DB::rollBack();
            Log::debug('新增推荐用户:'.$exception->getMessage());
            return Response::create([
                'message'  => '新增推荐用户失败,请重试',
                'error' => $exception->getMessage(),
                'status_code'   => 500
            ]);
        }
    }
    //编辑
    public function edit($request){
        $memberGroup = $this->memberGroup->where(['id'=>$request['id']])->first();
        if(!$memberGroup){
            return Response::create([
                'message'  => '该分组不存在',
                'status_code'   => 500
            ]);
        }
        $memberGroup->name = $request['name'];
        $memberGroup->is_suggest = $request['is_suggest'];

        if(!empty($request['member_list'])){
            $member_ids = json_decode($request['member_list']);
            $count = count($member_ids);
            if($count >= 50){
                return Response::create([
                    'message'  => '推荐用户最多选50个,当前人数:'.$count.'人',
                    'status_code'   => 500
                ]);
            }
        }
        DB::beginTransaction();
        try{
            if($request['is_suggest'] == 1){
                $_memberGroup = $this->memberGroup->where(['is_suggest'=>1])->where('id','<>',$memberGroup->id)->first();
                if($_memberGroup){
                    $this->memberGroup->where(['id'=>$_memberGroup->id])->update(['is_suggest'=>0]);
                }
            }
            $group = $memberGroup->save();
            if($group){
                //删除
                $this->memberGroupInfo->where(['member_group_id'=>$memberGroup->id])->delete();

                $member_data = [];
                foreach($member_ids as $value){
                    $member_data[] = [
                        'member_group_id' => $memberGroup->id,
                        'uid' => $value->id,
                        'sort' => $value->sort,
                    ];
                }
                $this->memberGroupInfo->insert($member_data);
            }
            DB::commit();
            return Response::create();
        }catch (QueryException $exception){
            DB::rollBack();
            Log::debug('编辑推荐用户分组:'.$exception->getMessage());
            return Response::create([
                'message'  => '编辑推荐用户分组失败,请重试',
                'error' => $exception->getMessage(),
                'status_code'   => 500
            ]);
        }
    }
    //删除内容
    public function delete($id){
        $memberGroup = $this->memberGroup->where(['id'=>$id])->first();
        if($memberGroup->is_suggest == 1){
            return Response::create([
                'message'  => '该用户组推荐中无法删除,请关闭推荐后删除',
                'status_code'   => 500
            ]);
        }
        DB::beginTransaction();
        try{
            $res = $this->memberGroup->where('id',$id)->delete();
            if($res){
                $this->memberGroupInfo->where('member_group_id',$id)->delete();
            }
            if(!$res){
                return Response::create([
                    'message'  => '删除失败',
                    'status_code'   => 500
                ]);
            }
            DB::commit();
            return Response::create();
        }catch (QueryException $exception){
            DB::rollBack();
            Log::debug('删除推荐用户分组:'.$exception->getMessage());
            return Response::create([
                'message'  => '删除推荐用户分组,请重试',
                'error' => $exception->getMessage(),
                'status_code'   => 500
            ]);
        }

    }
    //删除内容
    public function deleteMemberInfo($id){
        $res = $this->memberGroupInfo->where('id',$id)->delete();
        if(!$res){
            return Response::create([
                'message'  => '删除失败',
                'status_code'   => 500
            ]);
        }
        return Response::create();
    }
    public function setIsSuggest($request){
        $memberGroup = $this->memberGroup->where('id',$request['id'])->first();
        if(!$memberGroup){
            return Response::create([
                'message'  => '该分组不存在',
                'status_code'   => 500
            ]);
        }
        DB::beginTransaction();
        try{
            if($request['is_suggest'] == 1){
                $_memberGroup = $this->memberGroup->where(['is_suggest'=>1])->first();
                if($_memberGroup){
                    $this->memberGroup->where(['id'=>$_memberGroup->id])->update(['is_suggest'=>0]);
                }
            }
            $memberGroup->is_suggest = $request['is_suggest'];
            $memberGroup->save();
            DB::commit();
            return Response::create();
        }catch (QueryException $exception){
            DB::rollBack();
            Log::debug('设置推荐用户分组:'.$exception->getMessage());
            return Response::create([
                'message'  => '设置推荐用户分组,请重试',
                'error' => $exception->getMessage(),
                'status_code'   => 500
            ]);
        }
    }
    //设置排序
    public function setSort($request){
        $memberGroup = $this->memberGroup->where('id',$request['id'])->first();
        if(!$memberGroup){
            return Response::create([
                'message'  => '该分组不存在',
                'status_code'   => 500
            ]);
        }
        DB::beginTransaction();
        try{
            if(!empty($request['member_info'])){
                $memberInfo = json_decode($request['member_info']);
                foreach ($memberInfo as $key=>$value){
                    $this->memberGroupInfo->where('id',$value->id)->update(['sort'=>$value->sort]);
                }
            }
            DB::commit();
            return Response::create();
        }catch (QueryException $exception){
            DB::rollBack();
            Log::debug('设置推荐用户分组内容排序:'.$exception->getMessage());
            return Response::create([
                'message'  => '设置推荐用户分组内容排序,请重试',
                'error' => $exception->getMessage(),
                'status_code'   => 500
            ]);
        }

    }
}