<?php

namespace App\Notifications;

use App\Broadcasting\DatabaseNotificationOld;
use App\Broadcasting\PushNotificationOld;
use App\Components\Functions;
use App\Models\CollectSpend;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class SendWhenStaffCollect extends Notification implements ShouldQueue{
	use Queueable;

	/**
	 * Create a new notification instance.
	 *
	 * @return void
	 */
	protected $collectSpendId;
	protected $user;

	public function __construct( $collectSpendId ) {
		//
		$this->collectSpendId = $collectSpendId;
		$collectSpend = CollectSpend::query()->find($collectSpendId);
		$this->user = $collectSpend->user;
	}

	/**
	 * Get the notification's delivery channels.
	 *
	 * @param mixed $notifiable
	 *
	 * @return array
	 */
	public function via( $notifiable ) {
		return [ PushNotificationOld::class, DatabaseNotificationOld::class ];
	}

	/**
	 * Get the mail representation of the notification.
	 *
	 * @param mixed $notifiable
	 *
	 * @return \Illuminate\Notifications\Messages\MailMessage
	 */
	public function toMail( $notifiable ) {
		return ( new MailMessage )
			->line( 'The introduction to the notification.' )
			->action( 'Notification Action', url( '/' ) )
			->line( 'Thank you for using our application!' );
	}

	public function toPush( $notifiable ) {

		$text = Functions::getNotificationWhenStaffCollectText($this->collectSpendId);

		return [
			'type'            => config( 'constants.COLLECT_SPEND' ),
			'object_id'       => $this->collectSpendId,
			'body'            => $text,
			'title'           => 'Thông báo từ itro.vn',
			'image'           => $this->user->image,
		];
	}

	/**
	 * Get the array representation of the notification.
	 *
	 * @param mixed $notifiable
	 *
	 * @return array
	 */

	public function toArray( $notifiable ) {
		$text = Functions::getNotificationWhenStaffCollectText($this->collectSpendId);
		return [
			'body'  => $text,
			'title' => 'Thông báo từ itro.vn',
			'type' => config( 'constants.COLLECT_SPEND' ),
			'id' => $this->collectSpendId
		];
	}
}
