<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

use App\Models\{Invoice,User};

class InvoiceEmail extends Mailable implements ShouldQueue
{
	use Queueable, SerializesModels;

	protected Invoice $io;

	/**
	 * Create a new message instance.
	 *
	 * @param Invoice $o
	 */
	public function __construct(Invoice $o)
	{
		$this->io = $o;
		$this->queue = 'user';
	}

	/**
	 * Get the message envelope.
	 */
	public function envelope(): Envelope
	{
		// Send an email to an admin that the invoice was created
		$uo = User::where('email',config('osb.admin'))->sole();

		return new Envelope(
			bcc: $uo->email,
			subject: sprintf('Invoice %d for services, due %s',
				$this->io->lid,
				$this->io->due_at->format('Y-m-d')),
		);
	}

	/**
	 * Get the message content definition.
	 */
	public function content(): Content
	{
		return new Content(
			markdown: 'mail.invoice',
			with: [
				'io'=>$this->io,
				'site'=>$this->io->site,
			]
		);
	}
}