<?php

namespace App\Listeners;

use App\Events\UserRegistrationEvent;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Mail;
use App\Messaging;
use App\User;
use App\Mail\UserRegister;
use Modules\UserManagement\Entities\Profile;
use Modules\UserManagement\Entities\Role;
use Modules\Backend\Entities\Company;
use Modules\Backend\Entities\CompanyUser;

class UserRegistrationListener
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  UserRegistrationEvent  $event
     * @return void
     */
    public function handle(UserRegistrationEvent $event)
    {
           
        $profile=new Profile();
        $profile->user_id=$event->user->id;
        $profile->save();
        $this->assignRole($event->user);
        $this->logMessage($event->user);
        //$this->createCompany($event->user);
        Mail::to($event->user)->send(new UserRegister($event->user));
        return false;
    }

    public function logMessage($data){
        $model=new Messaging();
        $model->receiver_id=$data->id;
        $model->sender_id=0;
        $model->subject="Compnay Account";
        $model->content="An account has been created for your company.You will be able to added 5 company users who will be accessing the application using personal emails and password";
        $model->status="Unread";
        $model->flag="notification";
        $model->key=str_random(13);
        $model->save();

        return true;

    }

    public function assignRole($user){
     $role_id=Role::where(['name'=>'Company'])->first()->id;
        $role=$user->roles()->attach($role_id);
        return true;
        
        }

   public function createCompany($data)
   {
     $model=new Company();
     $model->user_id=$data->id;
     $model->company_name=$data->name;
     $model->save();

     
     return true;
   }
}
