<?php

namespace App\Repositories;

use App\Models\MemberInfo;
use Prettus\Repository\Eloquent\BaseRepository;
use Prettus\Repository\Criteria\RequestCriteria;
use Illuminate\Support\Facades\DB;

/**
 * Class MemberRepositoryEloquent.
 *
 * @package namespace App\Repositories;
 */
class MemberInfoRepository extends BaseRepository
{
    /**
     * Specify Model class name
     *
     * @return string
     */
    public function model()
    {
        return MemberInfo::class;
    }



    /**
     * Boot up the repository, pushing criteria
     */
    public function boot()
    {
        $this->pushCriteria(app(RequestCriteria::class));
    }

    /**
     * @param $uid
     * @return mixed
     */
    public function getMemberInfo($uid)
    {
        return $this->model->where(['uid'=>$uid])
            ->first();
    }

    public function createInfo($data)
    {
        return $this->model->create($data);
    }
    public function updateInfo($data, $uid)
    {
        return $this->model->where(['uid'=>$uid])->update($data);
    }

    public function findMemberInfo($where)
    {
        return $this->model->where($where)->first();
    }

    public function getCount($where, $subsite_id)
    {
        return $this->model->when($subsite_id,function ($query) use($subsite_id) {
            $query->whereHas('members', function ($query) use($subsite_id) {
                $query->where($subsite_id);
            });
        })->where($where)->count();
    }

    public function getMemberNumsByGroup($where, $member_where, $fields, $group_by, $order_by = '', $limit = '')
    {
        $rst = $this->model->select(DB::raw($fields))->where($where)->when($member_where, function ($query) use ($member_where) {
            $query->whereHas('members', function ($query) use ($member_where) {
                $query->where($member_where);
            });
        });
        if ($group_by) {
            $rst->groupBy($group_by);
        }
        if ($order_by) {
            $rst->orderByRaw($order_by);
        }
        if ($limit) {
            $rst->offset(0)->limit($limit);
        }
        return $rst->get();
    }

    public function checkUniaue($key, $value)
    {
        if ($this->model->withTrashed()->where($key, $value)->first()) {
            return false;
        }
        return true;
    }

}