<?php

/**
 * Magic Method Support
 * @property array notifType
 * @property array cacheNotifIcon
 * @method void comment_post(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
 * @method void add_comment_photo(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
 * @method void comment_photo(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
 * @method void comment_tracker(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1, 'notices_text' => ''])
 * @method void add_friend(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
 * @method void friend(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
 * @method void gift(array $args = ['id_user' => -1, 'id_last' => -1, 'id_obj' => -1])
 */

class notif
{
    private $notifType = [];
    private $cacheNotifIcon = [];

    /**
     * @var notif
     */
    private static $objectClassNotif;

    /**
     * notif constructor.
     */
    private function __construct()
    {
        /**
         * Добавляем список типов уведомлений
         * а так-же иконку типа уведомления.
         * Ключем массива является название типа уведомления,
         * а значение этого название селектора иконки.
         * Пример использования:
         * notif::init()->comment_tracker(['id_user' => 'кому посылаем', 'id_last' => 'от кого посылаем', 'id_obj' => 'id записи', 'notices_text' => 'текст сообщения']);
         * notif::init()->comment_post(['id_user' => 'кому посылаем', 'id_last' => 'от кого посылаем', 'id_obj' => 'id записи']);
         */
        $this->notifType ['comment_post'] = 'icon_notify_mini_comment'; // комментирование записи
        $this->notifType ['add_comment_photo'] = 'icon_notify_mini_photo_tag';// оставил коммент к фото
        $this->notifType ['comment_photo'] = 'icon_notify_mini_repost'; // ответил на коммент к фото
        $this->notifType ['comment_tracker'] = 'icon_notify_mini_interesting'; // ответ баг трекере
        $this->notifType ['add_friend'] = 'icon_notify_mini_friend_accepted'; //  добавили в друзья
        $this->notifType ['no_friend'] = 'icon_notify_mini_error'; //  отменили заявку в друзья
        $this->notifType ['friend'] = 'icon_notify_mini_follow'; // заявка в друзья
        $this->notifType ['gift'] = 'icon_notify_mini_gift'; // сделали подарок
        $this->notifType ['blog'] = 'icon_notify_mini_wall'; // комментарии к блогу
        $this->notifType ['blog_otvet'] = 'icon_notify_mini_repost'; // ответ на комментраий к блогу
    }

    /**
     * @return notif
     */
    public static function init() {
        if((self::$objectClassNotif instanceof self) === false) {
            self::$objectClassNotif = new static();
        }
        return self::$objectClassNotif;
    }


    /**
     * @param string $name
     * @param array $arguments
     */
    public function __call($name, array $arguments)
    {
        // TODO: Implement __call() method.
        $arguments = array_shift($arguments);
        if (array_key_exists('id_user', $arguments) === false || array_key_exists('id_last', $arguments) === false || array_key_exists('id_obj', $arguments) === false) {
            return;
        }
        if (array_key_exists($name, $this->notifType) === false) {
            return;
        }
        DB:: $pdo->query("INSERT INTO `notices` (`id_user`, `id_last`, `time`, `type`, `id_obj`, `count`, `notices_text`) VALUES (?, ?, ?, ?, ?, '1', ?);", array($arguments['id_user'], $arguments['id_last'], time(), $name, $arguments['id_obj'], (array_key_exists('id_obj', $arguments) === false ? '' : $arguments['notices_text'])));
    }

    /**
     * <p>Определяем иконку уведомления в
     * зависимости от типа уведомления</p>
     * @param $notifType
     * @return string
     */
    public function getTypeIcon($notifType)
    {
        if (array_key_exists($notifType, $this->cacheNotifIcon) === false)
        {
            if($notifType === 'error_post') {
                $this->cacheNotifIcon[$notifType] = 'icon_notify_mini_error';
            } else {
                if (array_key_exists($notifType, $this->notifType) === true) {
                    $this->cacheNotifIcon[$notifType] = $this->notifType[$notifType];
                } else {
                    $this->cacheNotifIcon[$notifType] = 'icon_notify_mini_private_post';
                }
            }
        }
        return $this->cacheNotifIcon[$notifType];
    }
}