function partners_yandex_map_init() {
    // Функция ymaps.ready() будет вызвана, когда
    // загрузятся все компоненты API, а также когда будет готово DOM-дерево.
    let myMap;
    let placemarkCollections = {};
    let placemarkList = {};

    // Создаем карту
    myMap = new ymaps.Map("map", {
        center: [48.486518, 135.115512],
        zoom: 15,
        controls: [
            'zoomControl'
        ],
        zoomMargin: [20]
    });


    let terminals = partners_terminals_read();

    for (let i = 0; i < shopList.length; i++) {

        // Добавляем название города в список
        $('div#cities').append('<a href="#" id="goto" class="goto" data-goto= ' + i + ' title=' + shopList[i].cityName + '>' + shopList[i].cityName + '</a>')

        // Создаём коллекцию меток для города
        let cityCollection = new ymaps.GeoObjectCollection();

        for (let c = 0; c < shopList[i].shops.length; c++) {
            let shopInfo = shopList[i].shops[c];

            let shopPlacemark = new ymaps.Placemark(
                shopInfo.coordinates,
                {
                    hintContent: shopInfo.name,
                    balloonContent: shopInfo.name,
                },
            );

            if (!placemarkList[i]) placemarkList[i] = {};
            placemarkList[i][c] = shopPlacemark;

            // Добавляем метку в коллекцию
            cityCollection.add(shopPlacemark);

        }

        placemarkCollections[i] = cityCollection;

        // Добавляем коллекцию на карту
        myMap.geoObjects.add(cityCollection);

    }
}

function partners_terminals_read(amount = 300) {
    let terminals;

    $.ajax({
        url: '/terminals/read',
        type: 'post',
        dataType: 'json',
        data: {
            '_csrf': yii.getCsrfToken(),
            amount
        },
        success: function (data, status, xhr) {

            if (data !== undefined) {
                // Получены данные с сервера

                // Список терминалов
                if (data.terminals !== undefined) {

                    terminals = data.terminals;
                }
            }

            return yandex_map_response(data, status, xhr);
        },
        error: yandex_map_response_error
    });

    return terminals;
}

// Переключение города
$('div#cities').on('click', 'a#goto', function () {
    let cityId = $(this).attr('data-goto');

    // Масштабируем и выравниваем карту так, чтобы были видны метки для выбранного города
    myMap.setBounds(placemarkCollections[cityId].getBounds(), { checkZoomRange: true }).then(function () {
        if (myMap.getZoom() > 15) myMap.setZoom(15); // Если значение zoom превышает 15, то устанавливаем 15.
    });

    // Добавление списка филиалов определенного города
    // $('#shops').html('');
    // for (let c = 0; c < shopList[cityId].shops.length; c++) {
    //     $('#shops').append('<li value="' + c + '">' + shopList[cityId].shops[c].name + '</li>');
    // }
});


function yandex_map_response(data, status, xhr) {
    // Обработка ответов

    main_response(data, status, xhr);
};

function yandex_map_response_success(data, status, xhr) {
    // Обработка ответов от удавшихся запросов

    yandex_map_response(data, status, xhr);
};

function yandex_map_response_error(data, status, xhr) {
    // Обработка ответов от неудавшихся запросов

    // Инициализация
    data = data.responseJSON;

    yandex_map_response(data, status, xhr);
};
