/home/mip/mip/app/Modules/Likod/Repositories/Settings/Users/UserRepository.php
<?php

namespace QxCMS\Modules\Likod\Repositories\Settings\Users;
use Illuminate\Support\Arr;
use QxCMS\Modules\AbstractRepository;
use QxCMS\Modules\Likod\Repositories\Settings\Users\UserRepositoryInterface;
use QxCMS\Modules\Likod\User;
use QxCMS\Modules\Likod\Models\Settings\Roles\Role;

class UserRepository extends AbstractRepository implements UserRepositoryInterface
{
    protected $model;
    protected $role;
   
    function __construct(User $model, Role $role)
    {
        $this->model = $model;
        $this->role = $role;
    }

    public function create(array $request)
    {
        $user = $this->model->fill($this->makeUser($request));
        $user->save();
        return $user;
    }

    public function getUsersWithRole($columns = ['*'])
    {
        $users = $this->model->select($columns)->with('role');
        return $users;
    }

    public function update($id, array $request)
    {
        $user = $this->findById($id);
        $user->fill($this->changePassword($request));
        return $this->affectedRows($user);
    }

    public function affectedRows(User $user) 
    {
        if(count($user->getDirty()) > 0) {
            $user->save();
            session()->flash('success', 'Successfully updated.');
        }
        return $user;
    }

    public function makeUser(array $request)
    {
        return $request;
    }

    public function changePassword(array $request)
    {
        $confirm_password = $request['password_confirmation'];
        
        if(!empty($confirm_password)) {
            $request['password'] = bcrypt($confirm_password);
            return $request;
        }

        return  Arr::except($request, ['password_confirmation','password']);
    }

    public function getRoleLists($role_id = 1)
    {
        if($role_id == 1) return $this->role->pluck('name', 'id');
        return  $this->role->where('id', '<>', 1)->pluck('name', 'id');
    }

    public function delete($id)
    {
        $user = $this->findById($id);
        $user->delete();
        return true;
    }
}