let accounts = [];
let selectedAccounts = new Set();
let currentFolder = 'all';

function initData() {
	const saved = JSON.parse(localStorage.getItem('mailingData'));
	if (saved) {
		accounts = saved.accounts || [];
		selectedAccounts = new Set(saved.selectedAccounts || []);
	}

	updateFolderCounts();
	setFolder('all');
	renderTable();
	updateSelectionActions(); // Добавлено
}


function updateSelectionActions() {
	const container = document.getElementById('selection-actions');
	if (selectedAccounts.size > 0) {
		container.style.display = 'flex';
	} else {
		container.style.display = 'none';
	}
}
  

// Сохранение состояния
function saveState() {
	const data = {
		accounts: accounts,
		selectedAccounts: Array.from(selectedAccounts),
	};
	localStorage.setItem('mailingData', JSON.stringify(data));
}

function updateFolderCounts() {
	const allCount = accounts.length;
	const workingCount = accounts.filter(acc => acc.folder === 'working').length;
	const archiveCount = accounts.filter(acc => acc.folder === 'archive').length;
	const aliveCount = accounts.filter(acc => acc.status === 'success').length;
	const deadCount = accounts.filter(acc => acc.status !== 'success').length;

	document.querySelector('#all-folder .account-count').textContent = allCount;
	document.querySelector('#working-folder .account-count').textContent =
		workingCount;
	document.querySelector('#archive-folder .account-count').textContent =
		archiveCount;
	document.querySelector('#no-spam-folder .account-count').textContent =
		aliveCount;
	document.querySelector('#with-spam-folder .account-count').textContent =
		deadCount;
}

// Фильтрация аккаунтов по папке
function filterAccounts() {
	switch (currentFolder) {
		case 'all':
			return accounts;
		case 'working':
			return accounts.filter(acc => acc.folder === 'working');
		case 'archive':
			return accounts.filter(acc => acc.folder === 'archive');
		case 'alive':
			return accounts.filter(acc => acc.status === 'success');
		case 'dead':
			return accounts.filter(acc => acc.status !== 'success');
		default:
			return accounts;
	}
}

function setFolder(folder) {
	currentFolder = folder;

	// Обновляем активные кнопки
	document.querySelectorAll('.account-folder-btn').forEach(btn => {
		btn.classList.remove('active');
		if (btn.dataset.folder === folder) {
			btn.classList.add('active');
		}
	});

	renderTable();
}

/// Рендеринг таблицы
function renderTable() {
	const tbody = document.querySelector('#accounts-table tbody');
	tbody.innerHTML = '';

	const filteredAccounts = filterAccounts();

	filteredAccounts.forEach((acc, index) => {
		const tr = document.createElement('tr');
		tr.dataset.id = acc.login;

		tr.innerHTML = `
            <td><input type="checkbox" class="row-checkbox"></td>
            <td>${index + 1}</td>
            <td>${acc.login}</td>
            <td>${acc.geo}</td>
            <td class="role-cell" onclick="editRole('${acc.login}')">${
			acc.role || 'Нажмите чтобы добавить'
		}</td>
            <td>${acc.first_name || ''}</td>
            <td>${acc.last_name || ''}</td>
            <td class="status-cell ${
							acc.status === 'success' ? 'status-alive' : 'status-dead'
						}">
                ${acc.status === 'success' ? 'Жив' : 'Мертв'}
            </td>
			<td class="action-icons">
				<button class="action-btn" data-tooltip="Открыть в вебе" onclick="openInWeb('${
					acc.login
				}')">
					<img src="static/images/web.png" alt="Открыть в вебе" class="menu-icon-img" />
				</button>
				<button class="action-btn" data-tooltip="Изменить роль" onclick="changeRole('${
					acc.login
				}')">
					<i class="fa-solid fa-tags"></i>
				</button>
				<button class="action-btn" data-tooltip="Переместить аккаунты" onclick="moveAccounts('${
					acc.login
				}')">
					<i class="fa-solid fa-compass"></i>
				</button>
			</td>

        `;

		const checkbox = tr.querySelector('.row-checkbox');
		checkbox.checked = selectedAccounts.has(acc.login);
		checkbox.onchange = () => toggleSelect(acc.login);

		tbody.appendChild(tr);
	});

	saveState();
}

function changeRole(login = null) {
  let accountsToChange = [];

  // Определяем аккаунты для изменения
  if (login) {
    // Изменение одного аккаунта
    accountsToChange = [login];
  } else {
    // Изменение выбранных аккаунтов
    if (selectedAccounts.size === 0) {
      alert('Выберите аккаунты для изменения роли');
      return;
    }
    accountsToChange = Array.from(selectedAccounts);
  }

  // Создаем модальное окно
  const modal = document.createElement('div');
  modal.classList.add('modal');
  modal.style.display = 'flex'; // показываем модалку

  modal.innerHTML = `
    <div class="modal-content">
      <button class="modal-close control-button" data-tooltip="Закрыть">&times;</button>
      <h3>Изменить роль для ${accountsToChange.length} аккаунтов</h3>
      <input
        type="text"
        id="new-role-input"
        class="role-input" style="padding: 12px 16px; border: 1px solid var(--border); border-radius: 10px; width: 100%; background: var(--surface-hover); color: var(--text);"
        placeholder="Введите новую роль"
      />
      <div class="action-icons-group" style="justify-content:center; margin-top:20px; gap: 16px;">
        <button id="confirm-role-change" class="action-button">Сохранить</button>
        <button id="cancel-role-change" class="action-button">Отмена</button>
      </div>
    </div>
  `;

  document.body.appendChild(modal);

  // Закрытие модалки
  modal.querySelector('.modal-close').addEventListener('click', () => {
    modal.remove();
  });
  modal.querySelector('#cancel-role-change').addEventListener('click', () => {
    modal.remove();
  });

  // Обработчик сохранения
  modal.querySelector('#confirm-role-change').addEventListener('click', () => {
    const newRoleInput = modal.querySelector('#new-role-input');
    const newRole = newRoleInput.value.trim();

    if (!newRole) {
      alert('Введите новую роль');
      newRoleInput.focus();
      return;
    }

    // Обновляем роль для выбранных аккаунтов
    accounts.forEach(acc => {
      if (accountsToChange.includes(acc.login)) {
        acc.role = newRole;
      }
    });

    // Закрываем модальное окно и обновляем интерфейс
    modal.remove();
    renderTable();
    saveState();
    showNotification('Роль обновлена', `Установлена роль: ${newRole}`);
  });
}


async function openInWeb(login = null) {
	// Определяем аккаунты для открытия
	let accountsToOpen = [];

	if (login) {
		accountsToOpen = [login];
	} else {
		if (selectedAccounts.size === 0) {
			alert('Выберите аккаунты для открытия в браузере');
			return;
		}
		accountsToOpen = Array.from(selectedAccounts);
	}

	for (const accLogin of accountsToOpen) {
		const account = accounts.find(acc => acc.login === accLogin);
		if (!account) {
			console.error(`Аккаунт не найден: ${accLogin}`);
			continue;
		}

		try {
			const payload = {
				login: account.login,
				password: account.password,
			};

			const response = await fetch('/open_browser', {
				method: 'POST',
				headers: {
					'Content-Type': 'application/json',
				},
				body: JSON.stringify(payload),
			});

			if (response.ok) {
				const result = await response.json();
				console.log(result.message);
				showNotification('Успешно!', `Браузер запущен для ${account.login}`);
			} else {
				throw new Error('Ошибка сервера: ' + response.status);
			}
		} catch (error) {
			console.error('Ошибка:', error);
			showNotification(
				'Ошибка',
				`Не удалось открыть браузер для ${account.login}`
			);
		}
	}
}


function toggleSelect(login) {
	if (selectedAccounts.has(login)) {
		selectedAccounts.delete(login);
	} else {
		selectedAccounts.add(login);
	}
	updateSelectionActions(); // Добавлено
	saveState(); // Сохраняем состояние после изменения
}

document.addEventListener('DOMContentLoaded', () => {
	initData();

	// Обработчики для кнопок папок
	document
		.getElementById('all-folder')
		.addEventListener('click', () => setFolder('all'));
	document
		.getElementById('working-folder')
		.addEventListener('click', () => setFolder('working'));
	document
		.getElementById('archive-folder')
		.addEventListener('click', () => setFolder('archive'));
	document
		.getElementById('no-spam-folder')
		.addEventListener('click', () => setFolder('alive'));
	document
		.getElementById('with-spam-folder')
		.addEventListener('click', () => setFolder('dead'));
});

function moveAccounts(login = null) {
	// Определяем аккаунты для перемещения
	let accountsToMove = [];

	if (login) {
		// Перемещение одного аккаунта
		accountsToMove = [login];
	} else {
		// Перемещение выбранных аккаунтов
		if (selectedAccounts.size === 0) {
			showNotification('Ошибка', 'Выберите аккаунты для перемещения');
			return;
		}
		accountsToMove = Array.from(selectedAccounts);
	}

	// Создаем модальное окно
	const modal = document.createElement('div');
	modal.className = 'modal';
	modal.style.display = 'flex';
	modal.innerHTML = `
        <div class="modal-content" style="width: 320px; text-align: center; padding: 20px;">
            <h3 style="margin-bottom: 20px;">Переместить ${accountsToMove.length} аккаунтов</h3>
            <div class="action-icons-group" style="flex-direction: column; gap: 12px;">
                <button class="action-button folder-select" data-folder="working">
                    <i class="fa-solid fa-briefcase"></i> В работу
                </button>
                <button class="action-button folder-select" data-folder="archive">
                    <i class="fa-solid fa-box-archive"></i> В архив
                </button>
            </div>
            <div style="margin-top: 20px;">
                <button class="action-button cancel-button">Отмена</button>
            </div>
        </div>
    `;

	document.body.appendChild(modal);

	// Обработчики для кнопок перемещения
	modal.querySelectorAll('.folder-select').forEach(btn => {
		btn.addEventListener('click', () => {
			const folder = btn.dataset.folder;

			accounts.forEach(acc => {
				if (accountsToMove.includes(acc.login)) {
					acc.folder = folder;
				}
			});

			// Закрываем модалку и обновляем данные
			modal.remove();
			updateFolderCounts();
			renderTable();
			saveState();

			// Показываем уведомление
			const folderName = folder === 'working' ? 'Для работы' : 'Архив';
			showNotification(
				'Перемещено',
				`${accountsToMove.length} аккаунтов перемещены в "${folderName}"`
			);
		});
	});

	// Обработчик отмены
	modal.querySelector('.cancel-button').addEventListener('click', () => {
		modal.remove();
	});
}


function showNotification(title, message) {
	// Закрываем все предыдущие уведомления
	document.querySelectorAll('.notification').forEach(el => el.remove());

	const notification = document.createElement('div');
	notification.className = 'notification';
	notification.innerHTML = `
        <div class="notification-icon">
            <svg viewBox="0 0 24 24">
                <path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/>
            </svg>
        </div>
        <div class="notification-content">
            <div class="notification-title">${title}</div>
            <div class="notification-message">${message}</div>
        </div>
        <div class="notification-progress"></div>
    `;

	document.body.appendChild(notification);

	// Показываем с анимацией
	setTimeout(() => {
		notification.classList.add('show');
	}, 10);

	// Автоматическое закрытие через 3 секунды
	setTimeout(() => {
		notification.classList.remove('show');
		setTimeout(() => notification.remove(), 400);
	}, 3000);
}
// Обновленная функция проверки аккаунтов
async function runAccountChecker(login = null) {
	let accountsToCheck = [];

	if (login) {
		// Проверка одного аккаунта
		accountsToCheck = [login];
	} else {
		// Проверка выбранных аккаунтов
		if (selectedAccounts.size === 0) return;
		accountsToCheck = Array.from(selectedAccounts);
	}

	const button = event?.currentTarget;
	const originalButtonHTML = button?.innerHTML;

	if (button) {
		button.innerHTML = `
            <img src="static/checker.png" alt="Иконка чекера" class="nav-icon-black"> 
            Подождите...
        `;
		button.disabled = true;
	}

	try {
		const response = await fetch('/run_account_checker', {
			method: 'POST',
			body: JSON.stringify({ accounts: accountsToCheck }),
			headers: {
				'Content-Type': 'application/json',
			},
		});

		const result = await response.json();

		// Обновляем статусы аккаунтов
		result.forEach(accountResult => {
			const account = accounts.find(a => a.login === accountResult.login);
			if (account) {
				account.status = accountResult.status;
			}
		});

		renderTable();

		// Показываем уведомление
		const count = accountsToCheck.length;
		const accountWord =
			count === 1
				? 'аккаунт'
				: count > 1 && count < 5
				? 'аккаунта'
				: 'аккаунтов';

		showNotification(
			'Проверка завершена!',
			`Успешно проверено ${count} ${accountWord}`
		);
	} catch (error) {
		console.error('Ошибка:', error);
		showNotification(
			'Ошибка проверки',
			'Произошла ошибка при проверке аккаунтов'
		);
	} finally {
		if (button) {
			button.innerHTML = originalButtonHTML;
			button.disabled = false;
		}

		const actionMenu = document.getElementById('action-menu');
		if (actionMenu.classList.contains('visible')) {
			actionMenu.classList.remove('visible');
			document.body.classList.remove('menu-open');
		}
	}
}

function deleteSelected() {
	const selected = Array.from(selectedAccounts);
	accounts = accounts.filter(acc => !selected.includes(acc.login));
	selectedAccounts.clear();
	updateFolderCounts();
	renderTable();
	updateSelectionActions(); // Добавлено
	saveState();
}

// Обновленная функция добавления аккаунтов
async function addNewAccounts() {
	const accountsText = document.getElementById('new-accounts').value;
	const accountsList = accountsText
		.split('\n')
		.filter(line => line.trim() !== '');

	const logins = [];
	const passwords = [];

	for (const line of accountsList) {
		const [login, password] = line.split(':');
		if (!login || !password) continue;
		logins.push(login.trim());
		passwords.push(password.trim());
	}

	try {
		const response = await fetch('/add_account', {
			method: 'POST',
			headers: {
				'Content-Type': 'application/json',
			},
			body: JSON.stringify({
				logins: logins,
				passwords: passwords,
			}),
		});

		const data = await response.json();

		if (Array.isArray(data)) {
			data.forEach((accountResult, index) => {
				const newAccount = {
					number: accounts.length + 1,
					login: logins[index],
					password: passwords[index],
					geo: accountResult.geo || 'Ошибка',
					first_name: accountResult.first_name || '',
					last_name: accountResult.last_name || '',
					role: '',
					status: accountResult.status, // Сохраняем статус
					used: new Date().toLocaleString(),
					error: accountResult.error || '',
				};
				accounts.push(newAccount);
			});
		}
	} catch (error) {
		console.error('Ошибка:', error);
	}

	document.getElementById('new-accounts').value = '';
	closeAddAccountForm();
	updateFolderCounts();
	renderTable();
	saveState();
}

// Функция для одиночной проверки аккаунта
function checkAccount(login) {
	runAccountChecker(login);
}

// Остальные функции остаются без изменений, но будут использовать поле status

// Инициализация при загрузке
document.addEventListener('DOMContentLoaded', initData);

// Функция переключения меню действий
function toggleActionMenu() {
	const menu = document.getElementById('action-menu');
	menu.style.display = menu.style.display === 'flex' ? 'none' : 'flex';
}
// Дополнительный JS для интерактивности таблицы
document.addEventListener('DOMContentLoaded', function () {
	const table = document.getElementById('accounts-table');
	const selectAllCheckbox = document.getElementById('select-all-checkbox');

	// Клик по строке для выделения
	table.addEventListener('click', function (e) {
		const row = e.target.closest('tr');
		if (!row || row.parentNode.tagName === 'THEAD') return;

		const checkbox = row.querySelector('.row-checkbox');
		if (!checkbox) return;

		// Получаем login из data-id строки
		const login = row.dataset.id;

		if (
			e.target.tagName !== 'INPUT' &&
			e.target.tagName !== 'A' &&
			!e.target.classList.contains('role-cell') &&
			!e.target.closest('.action-icons')
		) {
			checkbox.checked = !checkbox.checked;
			toggleSelect(login); // Передаем login аккаунта
		}

		row.classList.toggle('selected', checkbox.checked);
		updateSelectAllCheckbox();
	});

	// Клик по главному чекбоксу - выделить все
	selectAllCheckbox.addEventListener('change', function () {
		const checkboxes = table.querySelectorAll('tbody .row-checkbox');
		checkboxes.forEach(checkbox => {
			checkbox.checked = selectAllCheckbox.checked;
			const row = checkbox.closest('tr');
			row.classList.toggle('selected', selectAllCheckbox.checked);

			// Обновляем selectedAccounts для всех аккаунтов
			const login = row.dataset.id;
			if (selectAllCheckbox.checked) {
				selectedAccounts.add(login);
			} else {
				selectedAccounts.delete(login);
			}
		});
		updateSelectionActions(); // Добавлено
		saveState();
	});

	function updateSelectAllCheckbox() {
		const allCheckboxes = table.querySelectorAll('tbody .row-checkbox');
		const checkedCount = Array.from(allCheckboxes).filter(
			cb => cb.checked
		).length;
		selectAllCheckbox.checked =
			checkedCount > 0 && checkedCount === allCheckboxes.length;
	}
});

const actionMenu = document.querySelector('.action-menu');

function openMenu() {
	actionMenu.classList.add('show');
	document.body.classList.add('menu-open');
}

function closeMenu() {
	actionMenu.classList.remove('show');
	document.body.classList.remove('menu-open');
}

function toggleMenu() {
	actionMenu.classList.contains('show') ? closeMenu() : openMenu();
}

// Example: attach toggle to a button
document.querySelector('#menuToggleBtn').addEventListener('click', toggleMenu);

// Close when clicking outside the menu
document.addEventListener('click', e => {
	if (
		actionMenu.classList.contains('show') &&
		!actionMenu.contains(e.target) &&
		!e.target.closest('#menuToggleBtn')
	) {
		closeMenu();
	}
});


function editRole(accountId) {
	// Здесь будет логика для открытия модального окна или inline-редактирования роли
	console.log(`Изменение роли для аккаунта с ID: ${accountId}`);
	alert(`Изменение роли для аккаунта с ID: ${accountId}`);
}

function toggleActionMenu(event) {
	event.stopPropagation();
	const menu = document.getElementById('action-menu');
	const body = document.body;

	if (menu.classList.contains('visible')) {
		// закрываем
		menu.classList.remove('visible');
		body.classList.remove('menu-open');
	} else {
		// открываем
		menu.classList.add('visible');
		body.classList.add('menu-open');
	}
}

// Закрытие меню при клике вне его
document.addEventListener('click', function () {
	const menu = document.getElementById('action-menu');
	if (menu.classList.contains('visible')) {
		menu.style.opacity = '0';
		menu.style.transform = 'translateY(10px)';
		menu.style.visibility = 'hidden';
		menu.classList.remove('visible');
	}
});

// Предотвращаем закрытие при клике внутри меню
document
	.getElementById('action-menu')
	.addEventListener('click', function (event) {
		event.stopPropagation();
	});

function showAddAccountForm() {
	document.getElementById('add-account-modal').style.display = 'block';
}

function closeAddAccountForm() {
	document.getElementById('add-account-modal').style.display = 'none';
}


// ==================== НОВЫЕ ФУНКЦИИ ДЛЯ ЧИСТКИ АККАУНТОВ ====================

// Показать модальное окно чистки аккаунтов
function showCleanAccountModal() {
	document.getElementById('clean-account-modal').style.display = 'block';
	closeActionMenu();
}

// Закрыть модальное окно чистки аккаунтов
function closeCleanAccountModal() {
	document.getElementById('clean-account-modal').style.display = 'none';
}

// Выполнить чистку аккаунтов
async function performAccountCleaning() {
	// Собираем выбранные опции
	const cleanOptions = {
		avatars: document.getElementById('clean-avatars').checked,
		posts: document.getElementById('clean-posts').checked,
		photos: document.getElementById('clean-photos').checked,
		descriptions: document.getElementById('clean-descriptions').checked,
		birthdate: document.getElementById('clean-birthdate').checked,
		media: document.getElementById('clean-media').checked,
		friends: document.getElementById('clean-friends').checked
	};

	// Проверяем, есть ли выбранные аккаунты
	if (selectedAccounts.size === 0) {
		showNotification('Ошибка', 'Выберите аккаунты для чистки');
		closeCleanAccountModal();
		return;
	}

	const accountsToClean = Array.from(selectedAccounts);

	// Показываем уведомление о начале процесса
	showNotification('Чистка аккаунтов', `Начинаем чистку ${accountsToClean.length} аккаунтов...`);

	try {
		// Отправляем запрос на сервер для чистки аккаунтов
		const response = await fetch('/clean_accounts', {
			method: 'POST',
			headers: {
				'Content-Type': 'application/json',
			},
			body: JSON.stringify({
				accounts: accountsToClean,
				options: cleanOptions
			}),
		});

		if (response.ok) {
			const result = await response.json();
			
			// Закрываем модальное окно
			closeCleanAccountModal();
			
			// Показываем результат
			showNotification(
				'Чистка завершена', 
				`Успешно обработано ${result.success} из ${result.total} аккаунтов`
			);
			
			// Если были ошибки, показываем их
			if (result.errors && result.errors.length > 0) {
				console.warn('Ошибки при чистке:', result.errors);
			}
		} else {
			throw new Error('Ошибка сервера');
		}
	} catch (error) {
		console.error('Ошибка при чистке аккаунтов:', error);
		showNotification('Ошибка', 'Произошла ошибка при чистке аккаунтов');
		closeCleanAccountModal();
	}
}

// Закрытие модального окна при клике вне его области
document.addEventListener('click', function(event) {
	const modal = document.getElementById('clean-account-modal');
	if (event.target === modal) {
		closeCleanAccountModal();
	}
});

// Закрытие модального окна по клавише Escape
document.addEventListener('keydown', function(event) {
	if (event.key === 'Escape') {
		closeCleanAccountModal();
	}
});