<?php
declare(strict_types=1);

namespace Autogedal\Manufacturers\Model;

use Autogedal\Manufacturers\Api\Data\ManufacturerPageInterface;
use Autogedal\Manufacturers\Model\ResourceModel\ManufacturerPage as ResourceModel;
use Magento\Cms\Model\Page as CmsPage;
use Magento\Framework\DataObject\IdentityInterface;
use Magento\Framework\Model\AbstractModel;

class ManufacturerPage extends AbstractModel implements ManufacturerPageInterface, IdentityInterface
{
    public const CACHE_TAG = 'autogedal_manufacturer_page';
    public const MANUFACTURER_CACHE_TAG = 'autogedal_manufacturer';

    protected $_cacheTag = self::CACHE_TAG;

    protected function _construct(): void
    {
        $this->_init(ResourceModel::class);
    }

    public function getPageId()
    {
        return $this->getData(self::PAGE_ID);
    }

    public function setPageId($pageId)
    {
        return $this->setData(self::PAGE_ID, $pageId);
    }

    public function getOptionId()
    {
        return $this->getData(self::OPTION_ID);
    }

    public function setOptionId($optionId)
    {
        return $this->setData(self::OPTION_ID, $optionId);
    }

    public function getCmsPage()
    {
        return $this->getData(self::CMS_PAGE);
    }

    public function setCmsPage($cmsPage)
    {
        return $this->setData(self::CMS_PAGE, $cmsPage);
    }

    public function getSlug()
    {
        return $this->getData(self::SLUG);
    }

    public function setSlug($slug)
    {
        return $this->setData(self::SLUG, $slug);
    }

    public function getCreatedAt()
    {
        return $this->getData(self::CREATED_AT);
    }

    public function setCreatedAt($createdAt)
    {
        return $this->setData(self::CREATED_AT, $createdAt);
    }

    public function getUpdatedAt()
    {
        return $this->getData(self::UPDATED_AT);
    }

    public function setUpdatedAt($updatedAt)
    {
        return $this->setData(self::UPDATED_AT, $updatedAt);
    }

    public function getIdentities(): array
    {
        $identities = [self::CACHE_TAG, self::MANUFACTURER_CACHE_TAG . '_' . $this->getOptionId()];
        if ($this->dataHasChangedFor(self::CMS_PAGE)) {
            foreach ($this->getResource()->getCmsPageIds((int)$this->getOptionId()) as $cmsPageId) {
                $identities[] = CmsPage::CACHE_TAG . '_' . $cmsPageId;
            }
        }

        return $identities;
    }
}
