<?php

namespace Tests\Intaro\RetailCrm;

use Intaro\RetailCrm\Component\ConfigProvider;

class Helpers
{
    /** @var \ReflectionClass */
    private static $configReflection;

    /**
     * Sets property into config provider
     *
     * @param string $propertyName
     * @param mixed  $value
     *
     * @throws \ReflectionException
     */
    public static function setConfigProperty(string $propertyName, $value)
    {
        static::regenerateConfigReflection();
        $property = static::$configReflection->getProperty($propertyName);
        $property->setAccessible(true);
        $property->setValue($value);
    }

    /**
     * Sets property into config provider
     *
     * @param string $propertyName
     *
     * @return mixed
     * @throws \ReflectionException
     */
    public static function getConfigProperty(string $propertyName): mixed
    {
        static::regenerateConfigReflection();
        $property = static::$configReflection->getProperty($propertyName);
        $property->setAccessible(true);
        return $property->getValue();
    }

    /**
     * Regenerates config reflection
     */
    protected static function regenerateConfigReflection(): void
    {
        if (null === static::$configReflection) {
            static::$configReflection = new \ReflectionClass(ConfigProvider::class);
        }
    }
}