let options = {
    username_list: [],
    diapason_akk: [],
    invite_sleep: [2,4],
    login_group: "",
    quantity: "40",
    admin_phone: "",
    num_thread: "10",
    request_adding_status: "0",
    request_adding_count: "20",
    leave_chat_status: "0"
  };
  
  // получение данных с формы при нажатии
  $('#adding_group_start').on('click', async function () {
  
    let quantity_max = $('#adding_account_full').val();
    if (quantity_max !== "") {
      options.quantity = $('#adding_account_full').val();
    } else {
      options.quantity = "40";
    }
  
    let admin_phone = $('#adding_group_admin').val();
    if (admin_phone !== "") {
      options.admin_phone = $('#adding_group_admin').val();
    } else {
      options.admin_phone = "";
    }

    let num_thread = $('#num_thread').val();
    if (num_thread !== "") {
      options.num_thread = $('#num_thread').val();
    } else {
      options.num_thread = "10";
    }

    if ($('#request_adding').is(':checked')){
      options.request_adding_status = '1';
      options.request_adding_count = $('#request_adding_count').val();
    } else {
      options.request_adding_status = '0';
    }

    if ($('#leave_chat').is(':checked')){
      options.leave_chat_status = '1';
    } else {
      options.leave_chat_status = '0';
    }
  
    options.login_group = $('#adding_group').val();
    // Получение данных из textarea - @ЮЗЕРНЕЙМЫ
    options.username_list = [];
    let lines = $('#username_textarea_add').val().split(/\n/);
    for (var i = 0; i < lines.length; i++) {
      if (/\S/.test(lines[i])) {
        options.username_list.push($.trim(lines[i]));
      }
    }
    
    clear_log = 0
    let json = JSON.stringify(options);
    let this_class = $(this).hasClass("btn-success");
    if (this_class == true) {
      // =============
      $("#num_send_user").text(0);
      // =============
      $(this).removeClass('btn-success');
      $(this).addClass('btn-danger');
      $(this).text("Остановить добавление");
      $('#log li').remove();
      eel.invite_to_chanel_admin_id(json)();
    } else {
      $(this).removeClass('btn-danger');
      $(this).addClass('btn-success');
      $(this).text("Запустить добавление");
      eel.stopped('inviter_admin_id') //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ТУТ КНОПКА ОТМЕНИТЬ
      stoper_sender()
    }
  
  });
  
  window.addEventListener("beforeunload", function (e) {        
    eel.stopped('inviter')
  });
  
  eel.expose(set_finished_btn);
  function set_finished_btn(){
      $('#adding_group_start').removeClass('btn-danger');
      $('#adding_group_start').addClass('btn-success');
      $('#adding_group_start').text("Запустить добавление");
      stoper_sender()
  }
  
  $('#set_sleep_inviting').on('click', async function () {
    $('#set_sleep_modal').modal('hide');
    options.invite_sleep[0] = $('#sleep_add_membs_from').val();
    options.invite_sleep[1] = $('#sleep_add_membs_before').val();
  });
  
  $('#select_accounts').on('click', async function () {
    options.diapason_akk = [];
    load_accounts();
  });
  
  $('#request_adding').on('click', async function () {
    if ($('#request_adding').is(':checked')){
      $('#request_adding_form').removeClass('d-none');
    } else {
      $('#request_adding_form').addClass('d-none');
    }
  });
  
  $('#select_accounts_apply').on('click', async function () {
    $('#select_accounts_modal').modal('hide');
    let from = 1;
    let before = $('#table_users >tbody >tr').length;
    //Запускаем цикл по всей таблице
    for (let i = from; i <= before; i++) {
      let type_bg = $('#table_users tr').eq(i).attr("class");
      if (type_bg == "bg_selected") {
        //Получаем номер телефона
        phone_user = $('#table_users tr').eq(i).children('#phone').html();
        options.diapason_akk.push(phone_user);
      }
    }
    $("#account_num").removeClass('d-none');
    $("#account_num").text(options.diapason_akk.length);
  });
  
  
  let clear_log = 0
  eel.expose(log);
  function log(log_line) {
    if (clear_log == 250){
      $('#log li:first').remove();
    } else {clear_log = clear_log + 1}
    $('#log').append('<li>' + log_line + '</li>');
    $('#log_div').scrollTop($('#log_div')[0].scrollHeight);
  }
  
  eel.expose(success_count);
  function success_count(num) {
    $("#num_send_user").text(num); 
  }
  
  function success_local(massege){
    const Toast = Swal.mixin({
        toast: true,
        position: 'bottom-end',
        showConfirmButton: false,
        timer: 2000,
        timerProgressBar: true,
    });
  
    Toast.fire({
        icon: 'success',
        title: massege
    });
  }

// =================================================================================================
// ================================ [ Сохранение настроек инвайта ] ================================
// =================================================================================================

function get_num_user_list(){
  let lines = $('#username_textarea_add').val().split(/\n/).length;
  $("#num_textarea_user").text(lines);
}

$('#username_textarea_add').bind('input', function(){
  get_num_user_list();
});

let name_module_save = 'adding_members_admin_id'
let mass_username = []
let snapshots = [];
let currentSnapshot = null;  // Глобальная переменная для хранения текущего слепка

// Генерация уникального идентификатора для каждого слепка
function generateSnapshotId() {
  return Math.random().toString(36).substring(2, 15);
}

// Сохранение нового слепка
$('#save_snapshot').on('click', function () {
  let snapshotName = $('#snapshot_name_input').val().trim();
  
  if (!snapshotName) {
    alert('Введите название сохранения');
    return;
  }

  let usernameList = $('#username_textarea_add').val().split(/\n/).map(item => item.trim()).filter(item => item);
  let groupName = $('#adding_group').val().trim();
  let date = new Date().toLocaleString();

  // Генерация уникального идентификатора для слепка
  let snapshotId = generateSnapshotId();

  // Генерация уникального кода для списка юзернеймов
  let usernamesCode = `usernames_code_${snapshotId}`;

  // Сохраняем юзернеймы в localStorage с уникальным ключом
  localStorage.setItem(usernamesCode, JSON.stringify(usernameList));

  // Сохраняем дополнительные данные
  let adminAccount = $('#adding_group_admin').val();  // Аккаунт администратора
  let maxAccounts = $('#adding_account_full').val();  // Максимум с аккаунта
  let numThread = $('#num_thread').val();  // Кол-во потоков
  let sleepFrom = $('#sleep_add_membs_from').val();  // Задержка от
  let sleepBefore = $('#sleep_add_membs_before').val();  // Задержка до
  let requestAdding = $('#request_adding').prop('checked');  // Переключатель "Ограничение по запросам"
  let requestCount = $('#request_adding_count').val();  // Количество запросов
  let leaveChat = $('#leave_chat').prop('checked');  // Переключатель "Выходить с чата"

  // Сохраняем в массиве snapshots только метаданные
  let snapshot = {
    id: snapshotId,
    name: snapshotName,
    usernames_code: usernamesCode, // Ссылка на уникальный код юзернеймов
    group: groupName,
    date: date,
    admin_account: adminAccount,
    max_accounts: maxAccounts,
    num_thread: numThread,
    sleep_from: sleepFrom,
    sleep_before: sleepBefore,
    request_adding: requestAdding,
    request_count: requestCount,
    leave_chat: leaveChat
  };

  snapshots.push(snapshot);
  // localStorage.setItem('snapshots', JSON.stringify(snapshots));  // Сохраняем в localStorage
  localStorage.setItem(`${name_module_save}_snapshots`, JSON.stringify(snapshots));  // Сохраняем в localStorage

  // Обновляем отображение карточек
  displaySnapshots();
  
  // Очищаем инпут
  $('#snapshot_name_input').val('');
  get_num_user_list();
});

// Показать или скрыть задания
$('#show_list_task').on('click', function () {
  if ($(this).hasClass('collapsed')) {
      $(this).text('Скрыть задания');
  } else {
      $(this).html('<i class="fas fa-save mr-2"></i>Показать сохраненные задания');
  }
});

// Отображение всех сохраненных слепков
function displaySnapshots() {
  $('#saved_snapshots').empty();  // Очищаем контейнер

  snapshots.forEach(snapshot => {
    let snapshotCard = `
      <div class="card bg-primary text-white mb-2">
        <div class="card-body" style="padding: 0.7em;">
          <span class="card-title text-wrap" style="width: 8rem;">${snapshot.name}</span>
          <div class="text-white-50 small">${snapshot.date}</div>
          <button class="btn btn-info btn-sm mt-2 restore-snapshot" style="font-size: 0.775rem;" data-id="${snapshot.id}">Восстановить</button>
          <button class="btn btn-danger btn-sm mt-2 ml-2 delete-snapshot" style="font-size: 0.775rem;" data-id="${snapshot.id}">Удалить</button>
        </div>
      </div>
    `;
    $('#saved_snapshots').append(snapshotCard);
  });
}

// Восстановление настроек из слепка
$(document).on('click', '.restore-snapshot', function () {
  let snapshotId = $(this).data('id');
  let snapshot = snapshots.find(s => s.id === snapshotId);

  if (snapshot) {
    // Загружаем юзернеймы из localStorage с помощью уникального кода
    let usernames = JSON.parse(localStorage.getItem(snapshot.usernames_code));

    // Восстанавливаем данные
    $('#username_textarea_add').val(usernames.join('\n'));
    $('#adding_group').val(snapshot.group);

    // Восстанавливаем остальные данные
    $('#adding_group_admin').val(snapshot.admin_account);  // Аккаунт администратора
    $('#adding_account_full').val(snapshot.max_accounts);  // Максимум с аккаунта
    $('#num_thread').val(snapshot.num_thread);  // Кол-во потоков
    $('#sleep_add_membs_from').val(snapshot.sleep_from);  // Задержка от
    $('#sleep_add_membs_before').val(snapshot.sleep_before);  // Задержка до
    $('#request_adding').prop('checked', snapshot.request_adding);  // Переключатель "Ограничение по запросам"
    $('#request_adding_count').val(snapshot.request_count);  // Количество запросов
    $('#leave_chat').prop('checked', snapshot.leave_chat);  // Переключатель "Выходить с чата"

    // Сохраняем текущий слепок в глобальную переменную
    currentSnapshot = snapshot;

    // Показываем уведомление о восстановлении
    success_local('Настройки восстановлены!');
    get_num_user_list();
  }
});

async function sirusli(name){
  const result = await Swal.fire({
      title: `${name}`,
      text: "Вы действительно хотите удалить это задание?",
      icon: 'warning',
      showCancelButton: true,
      confirmButtonColor: '#3085d6',
      cancelButtonColor: '#d33',
      confirmButtonText: 'Да, удалить!',
      cancelButtonText: 'Отменить'
  });
  return result.isConfirmed;
}

// Удаление слепка
$(document).on('click', '.delete-snapshot', async function () {
  let snapshotId = $(this).data('id');
  let snapshotIndex = snapshots.findIndex(s => s.id === snapshotId);

  if (snapshotIndex !== -1) {
    const isConfirmed = await sirusli(snapshots[snapshotIndex].name);  // Дожидаемся подтверждения пользователя
    if (!isConfirmed) { return; }
    // Удаляем юзернеймы из localStorage по уникальному коду
    localStorage.removeItem(snapshots[snapshotIndex].usernames_code);

    // Удаляем слепок из массива
    snapshots.splice(snapshotIndex, 1);

    // Обновляем localStorage
    localStorage.setItem(`${name_module_save}_snapshots`, JSON.stringify(snapshots));

    // Обновляем отображение
    displaySnapshots();
  }
});

// Загрузка слепков из localStorage при загрузке страницы
$(document).ready(function() {
  let savedSnapshots = localStorage.getItem(`${name_module_save}_snapshots`);
  if (savedSnapshots) {
    snapshots = JSON.parse(savedSnapshots);
    displaySnapshots();
  }
});

// Функция для обработки добавленных юзернеймов и сохранения их в localStorage
function stoper_sender() {
  let username_list_new = [];

  $.each(options.username_list, function(index, value) {
    let element = $.inArray(value, mass_username);
    if (element == -1) {
      username_list_new.push(value);
    }
  });

  // Обновляем поле с юзернеймами
  $('#username_textarea_add').val(username_list_new.join("\n"));

  if (!currentSnapshot) {
    get_num_user_list();
    success_local('Логины обновлены!');
    return;
  }

  // Сохраняем обновлённые юзернеймы в localStorage для текущего слепка
  localStorage.setItem(currentSnapshot.usernames_code, JSON.stringify(username_list_new));

  // Обновляем количество пользователей
  get_num_user_list();
  success_local('Логины сохранены!');
}


eel.expose(dell_elem);
function dell_elem(elem) {
  mass_username.push(elem)
};
