<?php

namespace App\Notifications;

use App\Proponente;
use App\Trabalho;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Str;

class SolicitacaoCertificadoNotification extends Notification
{
    use Queueable;

    public $proponente;
    public $trabalho;
    public $destinatario;
    public $users;

    /**
     * Create a new notification instance.
     *
     * @return void
     */
    public function __construct(Proponente $proponente, Trabalho $trabalho, User $destinatario, $users)
    {
        $this->proponente = $proponente;
        $this->trabalho = $trabalho;
        $this->destinatario = $destinatario;
        $this->users = $users;
    }

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

    /**
     * Get the mail representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return \Illuminate\Notifications\Messages\MailMessage
     */
    public function toMail($notifiable)
    {
        $nomes = $this->users
            ->reject(function ($value, $key) {
                return $value->name == $this->proponente->user->name;
            })->map(function($user) {
                return $user->name;
            })->implode(', ');
        $qtd = $this->users->count();
        return (new MailMessage)
            ->subject('Recebimento de solicitação de certificado/declaração')
            ->greeting("Olá, {$notifiable->name}!")
            ->line("O proponente ". $this->proponente->user->name . " registrou uma solicitação de certificado/declaração para ". Str::plural('o', $qtd) . ' ' .  Str::plural('seguinte', $qtd) . ' ' . Str::plural('discente', $qtd) . ': ' . $nomes)
            ->line('Obrigado por usar o nosso sistema.')
            ->markdown('vendor.notifications.email');
    }

    /**
     * Get the array representation of the notification.
     *
     * @param  mixed  $notifiable
     * @return array
     */
    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}