<?php
/**
 * Copyright ©  All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Leadlion\SmartBill\Model;

use Leadlion\SmartBill\Api\Data\InvoiceInterface;
use Leadlion\SmartBill\Api\Data\InvoiceInterfaceFactory;
use Magento\Framework\Api\DataObjectHelper;

class Invoice extends \Magento\Framework\Model\AbstractModel
{

    protected $invoiceDataFactory;

    protected $dataObjectHelper;

    protected $_eventPrefix = 'leadlion_smartbill_invoice';

    /**
     * @param \Magento\Framework\Model\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param InvoiceInterfaceFactory $invoiceDataFactory
     * @param DataObjectHelper $dataObjectHelper
     * @param \Leadlion\SmartBill\Model\ResourceModel\Invoice $resource
     * @param \Leadlion\SmartBill\Model\ResourceModel\Invoice\Collection $resourceCollection
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\Model\Context $context,
        \Magento\Framework\Registry $registry,
        InvoiceInterfaceFactory $invoiceDataFactory,
        DataObjectHelper $dataObjectHelper,
        \Leadlion\SmartBill\Model\ResourceModel\Invoice $resource,
        \Leadlion\SmartBill\Model\ResourceModel\Invoice\Collection $resourceCollection,
        array $data = []
    ) {
        $this->invoiceDataFactory = $invoiceDataFactory;
        $this->dataObjectHelper = $dataObjectHelper;
        parent::__construct($context, $registry, $resource, $resourceCollection, $data);
    }

    /**
     * Retrieve invoice model with invoice data
     * @return InvoiceInterface
     */
    public function getDataModel()
    {
        $invoiceData = $this->getData();
        
        $invoiceDataObject = $this->invoiceDataFactory->create();
        $this->dataObjectHelper->populateWithArray(
            $invoiceDataObject,
            $invoiceData,
            InvoiceInterface::class
        );
        
        return $invoiceDataObject;
    }
}

