<?php

declare(strict_types=1);

namespace Mirzaev\Feip\Params;

use Mirzaev\Feip\Error;

/**
 * Параметр baz
 * 
 * @property string $baz baz
 * 
 * @package Mirzaev\Feip\Params
 * @author Арсен Мирзаев <red@hood.su>
 */
trait Baz
{
    /**
     * baz: параметр
     * 
     * @var string
     */
    protected string $baz = '';

    /**
     * baz: фильтр
     * 
     * @param string|int|float $target Значение для фильтрации
     * 
     * @return string|null
     */
    public static function baz($target): ?string
    {
        // Очистка
        if ($sanitized = filter_var($target, FILTER_CALLBACK, array('options' => [self::class, 'phoneNumberRus']))) {
            // Если очищение вернуло результат

            // Проверка
            if ($sanitized !== $target || !preg_match('/^7[0-9]{10}$/', $sanitized)) {
                // Если очищенное значение не совпадает с отправленным
                // или если не совпадает с паттерном "7**********" (российский номер)
                new Error(200, __FUNCTION__);
            }

            // В задании было указано: для номеров тип string
            return (string) $sanitized;
        } else {
            new Error(200, __FUNCTION__);
        }

        return null;
    }

    /**
     * baz: очистка
     * 
     * @param string|int|float $target Значение для очистки
     * 
     * @return string|null
     */
    public static function phoneNumberRus($target): string
    {
        // Поиск цифр
        preg_match_all('/[0-9]*/', $target, $match);

        // Инициализация
        $result = '';

        // Конкатанация найденных цифр
        foreach ($match[0] as $number) {
            $result .= $number;
        }

        // Конвертация под Российский номер
        $result[0] = 7;

        // В задании было сказано: для номеров тип string
        return (string) $result;
    }
}