<?php

namespace GeminiLabs\SiteReviews;

use GeminiLabs\SiteReviews\Helpers\Arr;

trait Deprecated
{
    protected array $mappedDeprecatedMethods = [];

    public function __call(string $oldMethod, $args)
    {
        $newMethod = Arr::get($this->mappedDeprecatedMethods, $oldMethod);
        if (empty($newMethod) || !method_exists($this, $newMethod)) {
            throw new \BadMethodCallException("Method [$oldMethod] does not exist.");
        }
        $className = (new \ReflectionClass($this))->getShortName();
        $message = sprintf(
            /* translators: %1$s: the deprecated method name, %2$s: the replacement method name */
            _x('The [%1$s] method has been deprecated and will be soon be removed, please use the [%2$s] method instead.', 'admin-text', 'site-reviews'),
            sprintf('%s::%s()', $className, $oldMethod),
            sprintf('%s::%s()', $className, $newMethod)
        );
        glsr()->append('deprecated', $message);
        return call_user_func_array([$this, $newMethod], $args);
    }
}
