<?php
/**
 * @author  Magediary
 * @package Magediary_ProductQuestion
 */

namespace Magediary\ProductQuestion\Model;

use Magediary\ProductQuestion\Api\Data\AnswerInterface;
use Magediary\ProductQuestion\Api\Data\AnswerInterfaceFactory;
use Magento\Framework\Api\DataObjectHelper;
use Magento\Catalog\Model\Product;
use Magento\Framework\Model\AbstractModel;

class Answer extends AbstractModel
{
    public const STATUS_PENDING = 0;
    public const STATUS_APPROVED = 1;
    public const STATUS_NOT_APPROVED = 2;

    public const TYPE_GUEST = 1;
    public const TYPE_CUSTOMER = 2;
    public const TYPE_ADMIN = 3;

    public const CERTIFIED_YES = 1;
    public const CERTIFIED_NO = 0;

    public const ANONYMOUS_YES = 1;
    public const ANONYMOUS_NO = 0;

    /**
     * @var AnswerInterfaceFactory
     */
    protected $answerDataFactory;

    /**
     * @var DataObjectHelper
     */
    protected $dataObjectHelper;

    /**
     * @var string
     */
    protected $_eventPrefix = 'magediary_productquestion_answer';

    /**
     * @param \Magento\Framework\Model\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param AnswerInterfaceFactory $answerDataFactory
     * @param DataObjectHelper $dataObjectHelper
     * @param ResourceModel\Answer $resource
     * @param ResourceModel\Answer\Collection $resourceCollection
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\Model\Context $context,
        \Magento\Framework\Registry $registry,
        AnswerInterfaceFactory $answerDataFactory,
        DataObjectHelper $dataObjectHelper,
        \Magediary\ProductQuestion\Model\ResourceModel\Answer $resource,
        \Magediary\ProductQuestion\Model\ResourceModel\Answer\Collection $resourceCollection,
        array $data = []
    ) {
        $this->answerDataFactory = $answerDataFactory;
        $this->dataObjectHelper = $dataObjectHelper;
        parent::__construct($context, $registry, $resource, $resourceCollection, $data);
    }

    /**
     * Retrieve answer model with answer data
     *
     * @return AnswerInterface
     */
    public function getDataModel()
    {
        $answerData = $this->getData();

        $answerDataObject = $this->answerDataFactory->create();
        $this->dataObjectHelper->populateWithArray(
            $answerDataObject,
            $answerData,
            AnswerInterface::class
        );

        return $answerDataObject;
    }

    /**
     * Return unique ID(s) for each object in system
     *
     * @return array
     */
    public function getIdentities()
    {
        $tags = [];
        if ($this->getProductId()) {
            $tags[] = Product::CACHE_TAG . '_' . $this->getProductId();
        }
        return $tags;
    }

    /**
     * Validate answer form fields
     *
     * @return bool|string[]
     */
    public function validate()
    {
        $errors = [];

        if ($this->getDetail() == '') {
            $errors[] = __('Please enter an answer.');
        }

        if (empty($errors)) {
            return true;
        }
        return $errors;
    }
}
