<?php
/**
 * Invoice Event.
 *
 * @package automattic/jetpack-crm
 */

namespace Automattic\Jetpack\CRM\Event_Manager;

use Automattic\Jetpack\CRM\Entities\Factories\Invoice_Factory;
use Automattic\Jetpack\CRM\Entities\Invoice;

/**
 * Invoice Event class.
 *
 * @since 6.2.0
 */
class Invoice_Event implements Event {

	/**
	 * The Invoice_Event instance.
	 *
	 * @since 6.2.0
	 * @var Invoice_Event
	 */
	private static $instance = null;

	/**
	 * Get the singleton instance of this class.
	 *
	 * @since 6.2.0
	 *
	 * @return Invoice_Event The Invoice_Event instance.
	 */
	public static function get_instance(): Invoice_Event {
		if ( ! self::$instance ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * A new invoice was created.
	 *
	 * @since 6.2.0
	 *
	 * @param array $invoice_data The created invoice data.
	 * @return void
	 */
	public function created( array $invoice_data ): void {

		/** @var Invoice $invoice */
		$invoice = Invoice_Factory::create( $invoice_data );

		do_action( 'jpcrm_invoice_created', $invoice );
	}

	/**
	 * The invoice was updated.
	 *
	 * @since 6.2.0
	 *
	 * @param array $invoice_data The updated invoice data.
	 * @param array $previous_invoice_data The previous invoice data.
	 * @return void
	 */
	public function updated( array $invoice_data, array $previous_invoice_data ): void {
		$invoice = Invoice_Factory::create( $invoice_data );

		$previous_invoice = Invoice_Factory::create( $previous_invoice_data );

		do_action( 'jpcrm_invoice_updated', $invoice, $previous_invoice );
	}
}