/home/mip/mip/app/Modules/Client/Repositories/Officers/OfficerRepository.php
<?php

namespace QxCMS\Modules\Client\Repositories\Officers;
use Illuminate\Support\Arr;
use QxCMS\Modules\AbstractRepository;
use QxCMS\Modules\Likod\Models\Clients\User;
use QxCMS\Modules\Client\Models\Settings\UserLogs\UserLogs as Log;

class OfficerRepository extends AbstractRepository implements OfficerRepositoryInterface
{
    protected $model;
    protected $log;
    protected $module_id = 10;

    function __construct(User $model, Log $log)
    {
        $this->model = $model;
        $this->log = $log;
    }

    
    public function create(array $request)
    {
        $user = auth()->user();
        $model = $this->model->fill($this->_serialize($request));
        $model->is_sub_user = 'Yes';
        $model->client_id = auth()->user()->client_id;
        $model->save();
        $this->log->saveLog(['action' => 'Create', 'module_id' => $this->module_id, 'user_id' => $user->id, 'data_id' => $model->id]);
        return $model;
    }

    public function _serialize(array $request)
    {
        $confirm_password = isset($request['password_confirmation']) ? $request['password_confirmation'] : '';
        if(!empty($confirm_password)) {
            $request['password'] = bcrypt($confirm_password);
            return $request;
        } else {
            return Arr::except($request, ['password_confirmation','password']);
        }
      
    }

    public function update($id, array $request)
    {
        $user = auth()->user();
        $model = $this->findById($id);
        $model->fill($this->_serialize($request));
        if(count($model->getDirty()) > 0) {
            $model->save();
            session()->flash('success', 'Successfully updated.');
            $this->log->saveLog(['action' => 'Update', 'module_id' => $this->module_id, 'user_id' => $user->id, 'data_id' => $model->id]);
        }

        return $model;
    }

    public function delete($id)
    {
        $user = auth()->user();
        $model = $this->findById($id);
        $model->delete();
        $this->log->saveLog(['action' => 'Delete', 'module_id' => $this->module_id, 'user_id' => $user->id, 'data_id' => $model->id]);
        return $this->getAjaxResponse('success', 'Successfully deleted.');
    }


    public function datatablesIndex()
    {
        return $this->model->where('client_id', auth()->user()->client->id)->isSubUser()->select(['*']);
    }

    public function getAccessTypes()
    {
        return [
            'Field Officer' => 'Field Officer',
            'Editor' => 'Editor'
        ];
    }

    /*
    
    API REQUEST
     */
    public function apiGetSubject(array $request)
    {
        if(!isset($request['user_id'])) return array();
        return $this->model->where('field_officer_assigned', $request['user_id'])->get();
    }
}