$(document).ready(function() {
let admA=$("#admA").val();
let kodA=$("#kodA").val();

    function updateGrid(columns) {
        let gridTemplateColumns;
        let gridTemplateRows;
        $(".toggle-button").removeClass("tgbtnhvr");
        switch (columns) {
            case 2:
                gridTemplateColumns = '1fr 1fr';
                gridTemplateRows = 'auto';
                $(".toggle-button").eq(0).addClass("tgbtnhvr");
                break;
            case 3:
                gridTemplateColumns = '1fr 1fr 1fr';
                gridTemplateRows = 'auto';
                $(".toggle-button").eq(1).addClass("tgbtnhvr");
                break;
            case 4:
                gridTemplateColumns = '1fr 1fr';
                gridTemplateRows = 'auto auto';
                $(".toggle-button").eq(2).addClass("tgbtnhvr");
                break;
            case 6:
                gridTemplateColumns = '1fr 1fr 1fr';
                gridTemplateRows = 'auto auto';
                $(".toggle-button").eq(3).addClass("tgbtnhvr");
                break;
          }
        $('.window-container').css({
            'grid-template-columns': gridTemplateColumns,
            'grid-template-rows': gridTemplateRows
        });
        $('.window').hide().slice(0, columns).show();


 
    // Добавляем новый option в начало списка
    $('.dvijok').each(function() {
        // Проверяем, есть ли в списке опция с value="0"
        if ($(this).find('option[value="0"]').length === 0) {
            // Если нет, добавляем новую опцию в начало списка
            $(this).attr("selected",false).prepend('<option value="0" selected="selected">Выберите нейросеть</option>');
        }
    });


    }

    $('.toggle-button').click(function() {
        const columns = $(this).data('windows');
        updateGrid(columns);
    });

    // По умолчанию отображаем 2 окна
    updateGrid(4);




$(document).on('input','#kreativ input[type=range]', function(){let kreativ=$(this).val();$('#kreativ input[type=text]').val(kreativ+'%');});
$(document).on('click','#imgrk', function(){$("#kreativ,#prompt,#algorithmx").toggle();});
$(document).on("click","#sendfrm .cthth_nero",function()
{
let isTariv = confirm("В сутки Вам доступно несколько запросов полностью бесплатно. Эти запросы являются сгораемыми, количество их зависит от Вашего тарифа в Системе. Чем выше Ваш тариф, тем больше сгораемых бесплатных запросов Вам доступно. После траты бесплатных запросов, новые начисляются через 24 часа с момента сгорания последнего запроса. После сжигания бесплатных запросов остальные запросы снимают средства с Вашего личного виртуального счета. Счет этот Вы можете пополнить в любое время и тратить по своему усмотрению. Ваш личный виртуальный счет представляет собой Dewiar токены, один такой токен приравнивается к 1$. Средства на Ваш счет можно либо перевести с банковской карты, либо заработать, привлекая новых пользователей в Систему. Хотите пополнить счет или поучаствовать в партнерской программе для бесплатного пополнения счета?"); if(isTariv==true){window.location.href = "/replenish_balance";}
});
$(document).on("click",'#dwrlg',function(){$("#mlnk").toggle();});
$(document).on("click",'#mlnk .close',function(){$("#mlnk").hide();});

$(document).on('keypress', '.editor', function(event) {if (event.keyCode == 13 && !event.shiftKey) {$("#mikrBtn").click();return false;}});

let completedWindows = 0; // Счетчик завершенных блоков
let totalWindows = 0; // Общее количество блоков, которые будут обрабатываться
let activeTimers = 0;
let timers = {};

function startTimer(w) {
    if (!timers[w]) {
        activeTimers++; // Увеличиваем счетчик активных таймеров
        timers[w] = Date.now(); // Сохраняем время начала для каждого таймера
        timers[w + '_id'] = setInterval(updateTimer.bind(null, w), 100); // Сохраняем идентификатор таймера для каждого окна
    }
}

function updateTimer(w) {
    let elapsedTime = (Date.now() - timers[w]) / 1000;
    $("#" + w + " .tmbx span").html(elapsedTime);
    if (elapsedTime > 120) {
        stopTimer(w);
        $("#" + w + " .tmbx span").html('∞');
        // время для данного блока вышло
    }
}

function stopTimer(w) {
    if (timers[w]) {
        clearInterval(timers[w + '_id']); // Останавливаем таймер только для конкретного окна
        $("#" + w + " .ldr").hide();
        delete timers[w]; // Удаляем таймер из объекта
        delete timers[w + '_id']; // Удаляем идентификатор таймера из объекта
        activeTimers--; // Уменьшаем счетчик активных таймеров
        // Проверяем, завершились ли все таймеры
        if (activeTimers === 0 && completedWindows === totalWindows) {
            alert('все завершено');
        }
    }
}












$(document).on('click', '#sendfrm submit', function() 
{
    let textr = $("#sendfrm .editor").html().replace(/<div>/g, "\n").replace(/<\/div>/g, "");
    $("#sendfrm .editor").html(textr);
    textr = $("#sendfrm .editor").text();
    if(textr!=false)
    {
    let prompt = $("#prompt").val();
    let selectedAlgorithme = $("input[name='algorithm']:checked").val(); // если 1 - стандартный, 2 - с суммаризацией и двойным проходом
    let temperature = $("#kreativ .slider").val();
    $("#mikrBtn").addClass("textXLoad");
    
    // Сброс значений перед новым запуском
    totalWindows = 0;
    completedWindows = 0;
    activeTimers = 0;
    timers = {};

    // Считываем значения "движков" и запускаем таймеры
    //let dvijokArray = [];
    for (let i = 1; i <= 6; i++) 
    {
        let w = $("#window" + i + " .dvijok").val();
        if(w != 0 && w != undefined) // Проверяем, чтобы значение не было равно 0 или undefined
        {
        totalWindows++; // Увеличиваем общее количество блоков для обработки
        startTimer('window' + i);
        $("#window" + i + " .ldr").show();
        $("#window" + i + " .smbx span").html('0$');
        $("#window" + i + " .vco").html('');
        $("#window" + i + " .btnbx").html('');
         }
    }

    // Отправляем запросы для каждого окна
    if(totalWindows==0){alert('Не выбрана ни одна нейросеть!');}
    else {for (let i = 1; i <= 6; i++) { sendRequestForWindow(i); }}
    
    function sendRequestForWindow(windowIndex) 
    {
        //let dvijokValue = dvijokArray[windowIndex - 1];
        let dvijokValue = $("#window" + windowIndex + " .dvijok").val();
        if(dvijokValue != 0 && dvijokValue!=undefined) 
        {
            $.ajax({
                type: 'POST',
                url: 'nero_arena.php',
                data: {
                    'admA': admA,
                    'kodA': kodA,
                    'nerov': textr,
                    'temperature': temperature,
                    'dvijok': dvijokValue,
                    'prompt': prompt,
                    'arena':1
                },
                dataType: "json",
                success: function(data) 
                {
                    if(data.count_request) {$("#sendfrm .cthth_nero div").text(data.count_request);}
                    if(data.reaction == 0 || data.reaction == 2) 
                    {
                        if (data.reaction == 2) 
                        {
                            let ErrTarif = $("#ErrTarif").val(); // защита от нескольких одновременных сообщений
                            if (ErrTarif == 0) 
                            {
                                $("#ErrTarif").val(1);
                                let isTarif = confirm(data.response + "\r\n\r\nПОПОЛНИТЬ СЧЕТ");
                                if (isTarif) 
                                {
                                location.href = '/replenish_balance';
                                }
                            }
                        }
                        $("#window" + windowIndex + " .ldr").hide();
                        $("#window" + windowIndex + " .vco").html(data.response);
                        $("#window" + windowIndex + " .btnbx").html('');
                    }
                   else 
                    {
                            let prompt_input = data.prompt_input;
                            let prompt_output = data.prompt_output;
                            let sumOtpr = data.sumOtpr;
                            let sumPol = data.sumPol;
                            let sumAll=data.sumAll;
                            $("#window" + windowIndex + " .ldr").hide();
                            let modelresp = data.modelresp;
                            //$("#window" + windowIndex + " .vco").html(modelresp);
// преобразовали в маркдаун
modelresp=marked.parse(modelresp);
$("#window" + windowIndex + " .vco").html(modelresp);

                            $("#window" + windowIndex + " .btnbx").html("Токенов оправлено: " + prompt_input + " (стоимость " + sumOtpr + "$) | Токенов получено: " + prompt_output + " (стоимость " + sumPol + "$)");
                            $("#window" + windowIndex + " .smbx span").html(sumAll+'$');
                            let timex=$("#window" + windowIndex + " .tmbx span").text().trim();
                            let timeValue = parseFloat(timex);
                            if (!isNaN(timeValue) && timeValue > 0) 
                                {
                                let speed=timeValue/prompt_output;
                                timeValue=parseFloat(timeValue.toFixed(5));
                                speed=parseFloat(speed.toFixed(5));
                                $("#window" + windowIndex + " .tmbx span").html(timeValue+' [<b title="Скорость генерации одного токена в секундах - чем МЕНЬШЕ, тем быстрее ИИ!">'+speed+'</b>]')
                                }

                    }



stopTimer('window' + windowIndex);
completedWindows++; // Увеличиваем счетчик завершенных блоков
checkCompletion();



                },
                error: function(jqXHR, textStatus, errorThrown) 
                {
                    $("#window" + windowIndex + " .ldr").hide();
                    $("#window" + windowIndex + " .vco").html("@Ошибка: " + textStatus + ", " + errorThrown);
                    $("#window" + windowIndex + " .btnbx").html('');



stopTimer('window' + windowIndex); 
completedWindows++; // Увеличиваем счетчик завершенных блоков
checkCompletion();



                }
            });
        }
        else 
        {
$("#window" + windowIndex + " .ldr").hide();
$("#window" + windowIndex + " .vco").html('');
$("#window" + windowIndex + " .btnbx").html('');
stopTimer('window' + windowIndex); 
// Проверяем, завершились ли все блоки
checkCompletion(); // Проверяем завершение
        }
    }
}
else{alert('Пустой запрос');} 
});







$(document).on('change', '.dvijok', function() 
{
//let dv=$(this).val();
//if(dv==0)
//{
    ClearBox();
//}
});

$(document).on("click",'#bdc .tpbx',function(){
let parentID = $(this).parent().attr('id');
let dv=$("#"+parentID+" .dvijok").val();
if(dv!=0)
{
    let idval = $("[id='x_"+dv+"']").val();
    if(idval!=undefined)
    {
    $(".window-container,#mnarena").hide();
    $(".window-containerx").show();
    $(".window-containerx .cmnt").html(idval);  
    }
}
else{alert('Выберите нейросеть из списка!');}
});
$(document).on("click",'.window-containerx .close',function(){
$(".window-container,#mnarena").show();
$(".window-containerx").hide();
$(".window-containerx .cmnt").html('');
});

function ClearBox()
{
    for (let i = 1; i <= 6; i++) 
    {
        let w = $("#window" + i + " .dvijok").val();
        if(w == 0 || w == undefined) // Проверяем, чтобы значение не было равно 0 или undefined
        {
        $("#window" + i + " .ldr").hide();
        $("#window" + i + " .vco").html('');
        $("#window" + i + " .btnbx").html(''); 
        $("#window" + i + " .smbx span").html('');
        $("#window" + i + " .tmbx span").html(''); 
        }
    }
}
$(document).on('click', '#clear', function() 
{
$(".window .ldr").hide();
$(".window .vco").html('');
$(".window .btnbx").html(''); 
$(".window .smbx span").html(''); 
$(".window .tmbx span").html(''); 
});



// Проверяем завершение
function checkCompletion() 
{
//console.log('completedWindows:', completedWindows, 'totalWindows:', totalWindows, 'activeTimers:', activeTimers);
if(completedWindows === totalWindows && activeTimers === 0) 
{
    setTimeout(function () 
    {
//alert('все завершено');
let selectedValue = $('input[name="algorithm"]:checked').val();
        // Если выбранное значение равно 2
        if (selectedValue == '2') 
        {
        // Устанавливаем значение 1 для radio button с id "standardAlgorithm"
        $('#standardAlgorithm').prop('checked', true);
        //запускаем алгоритм суммаризации
let textr = $("#sendfrm .editor").text();
let modelresp='По запросу: «'+textr+'» получены следующие результаты:  \r\r\r\r<br/><br/>';
for(let i = 1; i <= 6; i++) 
{
let w = $("#window" + i + " .dvijok").val();
  if(w != 0 && w != undefined)
  {
  modelresp +='\r\r<br/>Вариант №'+ i +'  <br/>'+$("#window" + i + " .vco").text()+'  ';
  }
}
modelresp +='\r\r\r\r<br/><br/> Теперь проанализируй всё это, и дай короткий, лаконичный, корректный ответ на мой запрос: «'+textr+'»!  ';
$("#sendfrm .editor").html(modelresp);
$("#mikrBtn").click();
        }
    }, 1000);

}
}//checkCompletion() 

$(document).on('click', '#algorithmx img', function() 
{
alert('Запрос будет идти в два этапа. Сначала в каждую модель отправится первый запрос. Затем, ответы соберутся в единый общий ответ, и снова отправятся в выбранные модели. После этого будет сделан общий итог. Этот алгоритм должен привести к получению более точного и взвешенного ответа совместными усилиями нескольких ИИ!');
});














});
