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

namespace Magediary\ProductQuestion\Model;

use Magediary\ProductQuestion\Api\Data\ActivityLogInterface;
use Magediary\ProductQuestion\Api\Data\ActivityLogInterfaceFactory;
use Magento\Framework\Api\DataObjectHelper;
use Magento\Framework\Model\AbstractModel;

class ActivityLog extends AbstractModel
{
    public const ACTIVITY_LIKE = 1;
    public const ACTIVITY_DISLIKE = 2;
    public const ACTIVITY_ABUSE = 3;

    /**
     * @var ActivityLogInterface
     */
    protected $activitylogDataFactory;

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

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

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

    /**
     * Retrieve activitylog model with activitylog data
     *
     * @return ActivityLogInterface
     */
    public function getDataModel()
    {
        $activitylogData = $this->getData();

        $activitylogDataObject = $this->activitylogDataFactory->create();
        $this->dataObjectHelper->populateWithArray(
            $activitylogDataObject,
            $activitylogData,
            ActivityLogInterface::class
        );

        return $activitylogDataObject;
    }

    /**
     * Activity types.
     *
     * @return array
     */
    public function getActivityTypes()
    {
        return [
            self::ACTIVITY_LIKE => __('Like'),
            self::ACTIVITY_DISLIKE => __('Dislike'),
            self::ACTIVITY_ABUSE => __('Abuse')
        ];
    }
}
