<?php
namespace EasyChat\Library\Http;





class TransportErrorCatalog {

    public static function describe($errno, $proxy_mode = ''): array {
        $errno = (int)$errno;
        $through_proxy = (string)$proxy_mode === 'proxy';

        $items = array(
            5 => array(
                'title' => 'Адрес proxy не найден',
                'hint' => 'Проверьте имя сервера proxy и DNS на хостинге.',
            ),
            6 => array(
                'title' => 'Адрес сервиса не найден',
                'hint' => 'DNS сервера не смог определить адрес внешнего API.',
            ),
            7 => array(
                'title' => $through_proxy ? 'Proxy недоступен' : 'Сервис недоступен',
                'hint' => $through_proxy
                    ? 'Проверьте host, port, тип proxy и доступ к нему с сервера.'
                    : 'Сервер не смог установить TCP-соединение с внешним API.',
            ),
            28 => array(
                'title' => $through_proxy ? 'Proxy не ответил вовремя' : 'Превышено время ожидания',
                'hint' => $through_proxy
                    ? 'Proxy отвечает слишком медленно или не пропускает этот сервис. Попробуйте другой proxy.'
                    : 'Внешний сервис или сеть хостинга ответили медленнее допустимого времени.',
            ),
            35 => array(
                'title' => 'Не удалось установить защищенное соединение',
                'hint' => 'Proxy или сервер прервал TLS-согласование. Проверьте поддержку HTTPS CONNECT.',
            ),
            56 => array(
                'title' => 'Соединение прервано при получении ответа',
                'hint' => 'Proxy или внешняя сеть закрыли соединение до завершения ответа.',
            ),
            60 => array(
                'title' => 'Сертификат не прошел проверку',
                'hint' => 'Проверьте системные сертификаты сервера и не отключайте TLS-проверку.',
            ),
            97 => array(
                'title' => 'Ошибка согласования с proxy',
                'hint' => 'Проверьте тип proxy, авторизацию и поддержку HTTPS CONNECT.',
            ),
        );

        $item = $items[$errno] ?? array(
            'title' => $errno > 0 ? 'Сетевая ошибка' : 'Нет ответа',
            'hint' => 'Повторите проверку и изучите настройки маршрута и сети хостинга.',
        );

        return array(
            'code' => $errno,
            'title' => $item['title'],
            'hint' => $item['hint'],
            'label' => $item['title'] . ($errno > 0 ? ' (cURL ' . $errno . ')' : ''),
        );
    }
}
