
document.addEventListener('DOMContentLoaded', () => {
	
	/* =========================
       CONFIG
    ========================= */
	
	// Mengambil semua baris tabel dengan class 'ai-item'
	const rows = document.querySelectorAll('tr.ai-item');

	// Elemen container utama progress
	const progressContainer = document.getElementById('progress-container');

	// Elemen progress bar (visual bar)
	const progressBar = document.getElementById('progress-bar');

	// Elemen teks untuk menampilkan persentase / status progress
	const progressText = document.getElementById('progress-text');

	// Elemen untuk menampilkan game / item yang sedang diproses
	const currentGame = document.getElementById('current-game');

	// Mengambil nilai nonce untuk keamanan (jika ada), default string kosong
	const nonce = document.getElementById('nonce')?.value || '';

	// Tombol untuk memulai proses import
	const btnStart = document.getElementById('btn-start');

	// Tombol untuk menjeda proses import
	const btnPause = document.getElementById('btn-pause');

	// Tombol untuk menghentikan proses import
	const btnStop = document.getElementById('btn-stop');

	// Baris atau elemen yang berisi base URL
	const baseUrlRow = document.getElementById('base_url');

	// Wrapper yang membungkus kontrol import (button, input, dll)
	const controlsWrapper = document.querySelector('.import-controls-wrapper');

	// Input untuk domain dasar (base domain URL)
	const baseDomainInput = document.getElementById('base_domain_url');

	// Modal notifikasi untuk proses import
	const ImportNotifModal = document.querySelector('#import-notification');

	// Elemen-elemen yang menampilkan jumlah progress (bisa lebih dari satu)
	const NoticeProgressCount = document.querySelectorAll('.progress-count');
	
	// Mengambil elemen <select> untuk memilih sumber (source) auto importer
	const sourceSelect = document.querySelector(
	  'select[name="auto_importer_settingss[source]"]'
	);

	// Mengambil elemen <input> untuk mengisi base URL sesuai source yang dipilih
	const baseUrlInput = document.querySelector(
	  'input[name="auto_importer_settingss[base_url]"]'
	);
	
	// Mengambil elemen label (teks) di dalam tombol Pause
	// Digunakan untuk mengubah teks tombol saat proses dijeda / dilanjutkan
	const pauseLabel = btnPause?.querySelector('.label');

	// Mengambil elemen label (teks) di dalam tombol Start
	// Digunakan untuk mengubah teks tombol saat proses dimulai / berjalan
	const startLabel = btnStart?.querySelector('.label');

	// Key untuk localStorage yang menyimpan daftar link
	// postingan AI yang sudah pernah di-import
	const STORAGE_KEY = 'ai_post_imported_links';

	// Mengambil item accordion pertama pada daftar AI
	const firstItem = document.querySelector('.ai-accordion .ai-acc-item');

	// Jika item pertama ditemukan, aktifkan (buka) secara default
	if (firstItem) {
	  firstItem.classList.add('active');
	}

	// Tombol untuk menyimpan pengaturan (Save Settings)
	const btnSaveSettings = document.querySelector(
	  'button.button-primary[type="submit"]'
	);

	// Tombol untuk reset pengaturan
	// Diambil dari input reset settings, lalu naik ke form induk,
	// kemudian mencari tombol submit di dalam form tersebut
	const btnResetSettings = document
	  .querySelector('input[name="auto_importer_reset_settings"]')
	  ?.closest('form')
	  ?.querySelector('button');


	// Jika input base domain tidak ditemukan, hentikan eksekusi script
	if (!baseDomainInput) return;

	// Jika tidak ada baris data (rows) atau tombol start tidak ditemukan,
	// hentikan eksekusi script
	if (!rows.length || !btnStart) return;

	// Index item yang sedang diproses
	let index = 0;

	// Status kontrol proses import
	let isRunning = false; // apakah proses sedang berjalan
	let isPaused  = false; // apakah proses dijeda
	let isStopped = false; // apakah proses dihentikan total

	// ID timeout untuk mengontrol jeda proses (setTimeout)
	let timeoutId = null; 

	// Statistik import untuk ringkasan di akhir proses
	let importStats = {
	  total: 0,        // total item diproses
	  success: 0,      // berhasil di-import
	  duplicate: 0,    // data duplikat
	  missingImage: 0,// gambar tidak ditemukan
	  draft: 0,        // disimpan sebagai draft
	  error: 0         // gagal / error
	};

	// Menyimpan log aktivitas terbaru (hanya 8–12 terakhir)
	let recentLogs = [];

	/**
	 * Menambahkan log terbaru ke daftar recentLogs
	 * @param {string} title  Judul / nama item
	 * @param {string} status Status (success, error, warning, dll)
	 * @param {string} extra  Keterangan tambahan (opsional)
	 */
	function addRecentLog(title, status, extra = '') {
	  const time = new Date().toLocaleTimeString([], {
		hour: '2-digit',
		minute: '2-digit'
	  });

	  const logEntry = {
		time,
		// Batasi panjang judul agar UI tetap rapi
		title: title.length > 60 ? title.substring(0, 57) + '...' : title,
		status,
		extra
	  };

	  // Tambahkan log ke posisi paling atas
	  recentLogs.unshift(logEntry);

	  // Batasi maksimal 10 log terakhir
	  if (recentLogs.length > 10) recentLogs.pop();

	  // Render ulang daftar log terbaru
	  renderRecentLogs();
	}

	/**
	 * Fungsi renderRecentLogs
	 * (dibungkus dengan eval / obfuscation)
	 * Bertugas menampilkan recentLogs ke elemen HTML
	 * dengan format waktu, judul, status, dan keterangan tambahan
	 */
	eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('d e(){6 1=7.f(\'g-h-1\');i(!1)j;1.8=\'\';k.l(0=>{6 2=7.m(\'2\');2.4.n=\'o\';2.8=`<3 4="9:#p">[${0.q}]</3><a>${0.r}</a>→<3 s="5-${0.5.t()}">${0.5}</3>${0.b?`<c 4="9:#u">(${0.b})</c>`:\'\'}`;1.v(2)})}',32,32,'log|list|li|span|style|status|const|document|innerHTML|color|strong|extra|small|function|renderRecentLogs|getElementById|recent|activity|if|return|recentLogs|forEach|createElement|marginBottom|4px|6b7280|time|title|class|toLowerCase|9ca3af|appendChild'.split('|'),0,{}));

	// Menyimpan seluruh log import (lebih detail)
	let importLogs = [];

	/**
	 * Render seluruh log import ke elemen HTML
	 */
	function renderImportLogs() {
	  const list = document.getElementById('import-log-list');
	  if (!list) return;

	  // Kosongkan daftar sebelum render ulang
	  list.innerHTML = '';

	  importLogs.forEach(log => {
		const li = document.createElement('li');
		li.style.marginBottom = '6px';

		let prefix = '';
		let colorClass = '';

		// Tentukan ikon & warna berdasarkan tipe log
		switch (log.type.toLowerCase()) {
		  case 'error':
			prefix = '✗';
			colorClass = 'text-red-600 font-medium';
			break;
		  case 'warning':
			prefix = '⚠';
			colorClass = 'text-amber-600';
			break;
		  case 'success':
			prefix = '✓';
			colorClass = 'text-green-600';
			break;
		  case 'info':
		  default:
			prefix = 'ℹ';
			colorClass = 'text-blue-600';
		}

		// Template tampilan log
		li.innerHTML = `
		  <span class="text-gray-500 text-xs">(${log.time})</span>
		  <span class="${colorClass}">${prefix}</span>
		  ${log.message}
		`;

		list.appendChild(li);
	  });

	  // Auto scroll ke log paling bawah
	  list.scrollTop = list.scrollHeight;
	}

	/**
	 * Menambahkan log baru ke importLogs
	 * @param {string} message Isi pesan log
	 * @param {string} type    Tipe log (info, success, warning, error)
	 */
	function addImportLog(message, type = 'info') {
	  const time = new Date().toLocaleTimeString([], {
		hour: '2-digit',
		minute: '2-digit',
		second: '2-digit'
	  });

	  // Tambahkan log ke awal array
	  importLogs.unshift({ time, message, type });

	  // Batasi maksimal 20 log terakhir
	  if (importLogs.length > 20) importLogs.pop();

	  // Render ulang log
	  renderImportLogs();
	}
	 
	// Jalankan saat halaman pertama kali dimuat
	showCustomSourceNotice();

	// Jalankan kembali saat pilihan source berubah
	sourceSelect?.addEventListener('change', showCustomSourceNotice);

	/**
	 * Membersihkan nilai URL dari spasi yang tidak diperlukan
	 * @param {string} value Nilai URL dari input
	 * @returns {string} URL yang sudah bersih
	 */
	function cleanUrl(value) {
	  return value
		.trim()               // Menghapus spasi di awal dan akhir
		.replace(/\s+/g, ''); // Menghapus semua spasi di tengah
	}
 
	/**
	 * Mengambil daftar link yang sudah pernah di-import
	 * dari localStorage
	 * @returns {Array} Array URL yang sudah di-import
	 */
	function getImportedLinks() {
	  try {
		// Ambil data dari localStorage dan parsing ke array
		return JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]');
	  } catch {
		// Jika terjadi error (data rusak / bukan JSON), kembalikan array kosong
		return [];
	  }
	}

	/**
	 * Menyimpan link baru ke localStorage
	 * (hanya jika belum pernah disimpan)
	 * @param {string} url URL postingan yang berhasil di-import
	 */
	function saveImportedLink(url) {
	  const links = getImportedLinks();

	  // Cegah duplikasi link
	  if (!links.includes(url)) {
		links.push(url);
		localStorage.setItem(STORAGE_KEY, JSON.stringify(links));
	  }
	}

	/**
	 * Mengecek apakah sebuah link sudah pernah di-import
	 * @param {string} url URL yang ingin dicek
	 * @returns {boolean} true jika sudah pernah di-import
	 */
	function isAlreadyImported(url) {
	  return getImportedLinks().includes(url);
	}

	/**
	 * Menandai baris (row) yang URL-nya sudah pernah di-import
	 * berdasarkan data yang tersimpan di localStorage
	 */
	function markImportedRows() {
	  // Ambil daftar link yang sudah di-import dan ubah ke Set
	  // agar pengecekan lebih cepat
	  const imported = new Set(getImportedLinks());

	  // Loop setiap baris data
	  rows.forEach(row => {
		// Cek apakah URL pada row ini sudah pernah di-import
		if (imported.has(row.dataset.url)) {
		  // Tambahkan class penanda bahwa item sudah di-import
		  row.classList.add('imported');

		  // Ubah badge status menjadi "Already Imported"
		  const badge = row.querySelector('.status-badge');
		  badge.className = 'status-badge badge-success';
		  badge.textContent = 'Already Imported';

		  // Ubah teks status di kolom status
		  row.querySelector('.status-text').textContent = 'Already Imported';
		}
	  });
	}

	// Jalankan fungsi saat halaman pertama kali dimuat
	markImportedRows();

	// Saat user melakukan paste pada input base domain
	baseDomainInput.addEventListener('paste', (e) => {
	  // Mencegah perilaku paste default
	  e.preventDefault();

	  // Ambil teks dari clipboard
	  const pasted = (e.clipboardData || window.clipboardData)
		.getData('text');

	  // Bersihkan URL lalu masukkan ke input
	  baseDomainInput.value = cleanUrl(pasted);
	});

	/* SAAT USER MENGETIK / MENGEDIT */
	baseDomainInput.addEventListener('input', () => {
	  // Bersihkan nilai input dari spasi
	  const cleaned = cleanUrl(baseDomainInput.value);

	  // Update input hanya jika ada perubahan
	  // (menghindari cursor lompat tanpa perlu)
	  if (baseDomainInput.value !== cleaned) {
		baseDomainInput.value = cleaned;
	  }
	});
	
	 /**
	 * Menonaktifkan tombol Save & Reset Settings
	 * Digunakan saat proses import berjalan agar user tidak mengubah pengaturan
	 */
	function disableSettingsButtons() {
	  if (btnSaveSettings) {
		btnSaveSettings.disabled = true;           // nonaktifkan tombol
		btnSaveSettings.classList.add('disabled'); // tambahkan class untuk styling disabled
	  }
	  if (btnResetSettings) {
		btnResetSettings.disabled = true;
		btnResetSettings.classList.add('disabled');
	  }
	}

	/**
	 * Mengaktifkan kembali tombol Save & Reset Settings
	 * Digunakan setelah proses import selesai / dibatalkan
	 */
	function enableSettingsButtons() {
	  if (btnSaveSettings) {
		btnSaveSettings.disabled = false;          // aktifkan tombol
		btnSaveSettings.classList.remove('disabled'); // hapus class styling disabled
	  }
	  if (btnResetSettings) {
		btnResetSettings.disabled = false;
		btnResetSettings.classList.remove('disabled');
	  }
	}

	/**
	 * Menampilkan notice khusus jika source dipilih "custom"
	 * dan menyembunyikan / menonaktifkan elemen terkait import
	 */
	function showCustomSourceNotice() {

	  // Hapus notice lama jika ada
	  const old = document.getElementById('ai-custom-notice');
	  if (old) old.remove();

	  if (!sourceSelect) return;

	  // Jika source = custom
	  if (sourceSelect.value === 'custom') {

		// Buat elemen notice baru
		const notice = document.createElement('div');
		notice.id = 'ai-custom-notice';
		notice.className = 'notice notice-warning';
		notice.style.marginTop = '10px';

		// Konten notice
		notice.innerHTML = `
		  <p>
			⚠️ <strong>Custom source selected.</strong><br>
			This for new source.
			Please contact <a href="//exthem.es" target="_blank">exthem.es</a> for new source.
		  </p>
		`;

		// Tambahkan notice di bawah select
		sourceSelect.closest('td')?.appendChild(notice);

		/* 🚫 Sembunyikan input Base URL */
		if (baseUrlRow) {
		  baseUrlRow.style.display = 'none';
		}	

		/* ❌ Sembunyikan kontrol import (Start, Pause, Stop, dll) */
		if (controlsWrapper) controlsWrapper.style.display = 'none';

		// 🔒 Kunci tombol Start agar tidak bisa diklik
		if (btnStart) {
		  btnStart.disabled = true;
		  btnStart.title = 'Custom source requires admin configuration';
		}	

	  } else {
		// Jika source bukan custom, tampilkan kembali semua elemen

		/* 👁 Tampilkan input Base URL */
		if (baseUrlRow) {
		  baseUrlRow.style.display = '';
		}

		/* 👁 Tampilkan kontrol import */
		if (controlsWrapper) {
		  controlsWrapper.style.display = '';
		}

		/* 🔓 Aktifkan kembali tombol Start */
		if (btnStart) {
		  btnStart.disabled = false;
		  btnStart.title = '';
		}
	  }
	}
	
	// ================================================
	// Fungsi untuk menampilkan / menyembunyikan modal notifikasi import
	// ================================================

	/**
	 * Menampilkan modal notifikasi import
	 */
	function showImportNotification() {
	  ImportNotifModal.style.display = 'block';
	}

	/**
	 * Menyembunyikan modal notifikasi import
	 */
	function hideImportNotification() { 
	  if (ImportNotifModal) ImportNotifModal.style.display = 'none';
	}

	// ================================================
	// Fungsi untuk memperbarui progress import di dalam modal
	// ================================================

	/**
	 * Update progress import di modal
	 * @param {number} current - Item yang sedang diproses saat ini
	 * @param {number} total - Total item yang akan di-import
	 * @param {string} currentTitle - Judul / nama item saat ini
	 * @param {string} editLink - Link untuk mengedit post hasil import (opsional)
	 */
	function updateImportProgressKeModal(current, total, currentTitle = '—', editLink = '') { 
	  if (total <= 0) return; // Jika total item 0, hentikan

	  // Hitung persentase progress
	  const percent = Math.min(100, Math.round((current / total) * 100));

	  // Update teks jumlah item saat ini dan total
	  document.getElementById('current-count').textContent = current;
	  document.getElementById('total-count').textContent = total;

	  // Update judul item yang sedang diproses
	  document.getElementById('current-item-title').textContent = `Processing: ${currentTitle}`;

	  // Update lebar progress bar sesuai persentase
	  document.getElementById('progress-fill').style.width = percent + '%';	  

	  // Tampilkan link edit jika ada (misal setelah import sukses)
	  const linkSection = document.getElementById('edit-link-section');
	  const editLinkEl = document.getElementById('edit-post-link');

	  if (editLink && editLink !== '#') {
		editLinkEl.href = editLink;
		linkSection.style.display = 'block';
	  } else {
		linkSection.style.display = 'none';
	  }
	}

	/**
	 * Menampilkan progress bar utama
	 * Digunakan untuk memberi visual feedback saat import berjalan
	 */
	function showProgress() {
	  progressContainer?.classList.add('visible'); // tambahkan class 'visible' untuk tampilkan container
	}

	/**
	 * Menyembunyikan progress bar utama
	 * Digunakan setelah proses import selesai atau dibatalkan
	 */
	function hideProgress() {
	  progressContainer?.classList.remove('visible'); // hapus class 'visible' agar container tersembunyi
	}
	
	/**
	 * Mereset seluruh UI dan status import ke kondisi awal
	 * Digunakan saat proses import selesai, dibatalkan, atau di-reset
	 */
	function resetUI() {
	  // Reset status kontrol proses
	  index = 0;
	  isRunning = false;
	  isPaused = false;
	  isStopped = false;

	  // Sembunyikan progress bar utama
	  hideProgress();

	  // Reset tombol Start
	  btnStart.disabled = false;                 // aktifkan kembali
	  btnStart.classList.remove('running');      // hapus class indikator sedang berjalan
	  startLabel.textContent = 'Start Import';   // kembalikan teks tombol

	  // Tombol Pause & Stop dinonaktifkan
	  btnPause.disabled = true;
	  btnStop.disabled = true;
	  pauseLabel.textContent = 'Pause';          // reset teks tombol Pause

	  // Reset setiap baris (row) di tabel import
	  rows.forEach(r => {
		r.classList.remove('processing', 'success', 'error', 'imported'); // hapus semua status
		const badge = r.querySelector('.status-badge');
		badge.className = 'status-badge badge-waiting'; // badge default
		badge.textContent = 'Wait';
		r.querySelector('.status-text').textContent = 'Wait';
	  });

	  // Tandai kembali baris yang sudah di-import sebelumnya
	  markImportedRows();

	  // Aktifkan kembali field / input pengaturan
	  enableSettingsFields(); 
	}

	/**
	 * Menampilkan pesan import selesai
	 * Menghilangkan tabel import, menampilkan elemen "complete" dengan fade-in
	 */
	function showImportCompleteMessage() {
	  const table = document.getElementById('ai-import-table');
	  const done  = document.getElementById('ai-import-complete');

	  if (table) {
		// Animasi fade-out tabel
		table.style.transition = 'opacity .4s ease';
		table.style.opacity = '0';
		setTimeout(() => { table.style.display = 'none'; }, 400);
	  }

	  if (done) {
		// Tampilkan elemen "Import Complete" dengan fade-in
		setTimeout(() => {
		  done.style.display = 'block';
		  done.style.opacity = '0';
		  done.style.transition = 'opacity .4s ease';
		  setTimeout(() => { done.style.opacity = '1'; }, 50);
		}, 450);
	  }
	}

	/**
	 * Menyembunyikan semua form manual pada setiap baris
	 */
	function hideAllManualForms() {
	  document.querySelectorAll('form#post_manual').forEach(form => {
		form.style.display = 'none';
	  });
	}

	/**
	 * Menampilkan form manual pada baris tertentu
	 * @param {HTMLElement} row - Baris tabel tempat form akan ditampilkan
	 */
	function showManualForm(row) {
	  const url = row.dataset.url;

	  // Jangan tampilkan jika item sudah pernah di-import
	  if (isAlreadyImported(url)) return;

	  const form = row.querySelector('form#post_manual');
	  if (form) {
		form.style.display = 'inline-block';
	  }
	}

	/**
	 * Menonaktifkan field pengaturan (select source dan base URL)
	 * Digunakan saat proses import sedang berjalan
	 */
	function disableSettingsFields() {
	  if (sourceSelect) sourceSelect.disabled = true;
	  if (baseUrlInput) baseUrlInput.disabled = true;
	}

	/**
	 * Mengaktifkan kembali field pengaturan
	 * Digunakan setelah proses import selesai atau dibatalkan
	 */
	function enableSettingsFields() {
	  if (sourceSelect) sourceSelect.disabled = false;
	  if (baseUrlInput) baseUrlInput.disabled = false;

	  // Periksa kembali apakah source custom, tampilkan notice jika perlu
	  showCustomSourceNotice();
	}
	
	 /**
	 * Menambahkan tooltip ke elemen
	 * @param {HTMLElement} el - Elemen yang ingin diberi tooltip
	 * @param {string} text - Teks tooltip
	 */
	function addTooltip(el, text) {
	  if (!el) return;

	  // Tambahkan class untuk styling tooltip
	  el.classList.add('ai-tooltip');

	  // Simpan teks tooltip di atribut data-tooltip
	  el.setAttribute('data-tooltip', text);
	}

	/**
	 * Menghapus tooltip dari elemen
	 * @param {HTMLElement} el - Elemen yang ingin dihapus tooltipnya
	 */
	function removeTooltip(el) {
	  if (!el) return;

	  el.classList.remove('ai-tooltip');
	  el.removeAttribute('data-tooltip');
	}

	/**
	 * Menampilkan toast notification sementara di layar
	 * @param {string} message - Pesan yang ditampilkan
	 * @param {string} type - Tipe toast (misal: 'success', 'error', 'info') untuk styling
	 */
	function showToast(message, type = '') {
	  const toast = document.createElement('div');

	  // Tambahkan class untuk styling toast
	  toast.className = `ai-toast ${type}`;
	  toast.textContent = message;

	  // Tambahkan toast ke body
	  document.body.appendChild(toast);

	  // Trigger animasi tampil (gunakan requestAnimationFrame agar transisi CSS berjalan)
	  requestAnimationFrame(() => {
		toast.classList.add('show');
	  });

	  // Hilangkan toast setelah 3,5 detik
	  setTimeout(() => {
		toast.classList.remove('show');

		// Hapus elemen dari DOM setelah animasi fade-out (300ms)
		setTimeout(() => toast.remove(), 300);
	  }, 3500);
	}


	/* =========================
	   MAIN PROCESS
	========================= */
	/**
	 * Fungsi utama untuk memproses item satu per satu
	 * Dipanggil secara rekursif dengan timeout antara setiap request
	 */
	function processNext() {
	  // Jika sedang dijeda atau dihentikan, hentikan proses
	  if (isPaused || isStopped) return;

	  // Jika semua row sudah diproses
	  if (index >= rows.length) {
		// Set progress bar ke 100%
		progressBar.style.width = '100%';
		progressText.textContent = `${rows.length} / ${rows.length}`;	

		// Delay sejenak sebelum menampilkan pesan selesai
		setTimeout(() => {
		  hideProgress();               // sembunyikan progress bar
		  showImportCompleteMessage();  // tampilkan pesan import selesai
		  hideImportNotification();     // sembunyikan modal notifikasi
		}, 1200);

		// Reset tombol dan label
		btnStart.disabled = false;
		btnPause.disabled = true;
		btnStop.disabled = true;
		startLabel.textContent = 'Start Import';
		pauseLabel.textContent = 'Pause';

		// Aktifkan kembali field & tombol pengaturan
		enableSettingsFields();
		enableSettingsButtons();
		controlsWrapper?.classList.remove('is-sticky');

		removeTooltip(btnSaveSettings);
		removeTooltip(btnResetSettings);

		// Sembunyikan controls wrapper
		controlsWrapper.style.display = 'none';

		// Tampilkan ringkasan statistik import
		const summaryList = document.getElementById('import-summary-list');
		const summarySection = document.getElementById('import-summary');

		if (summaryList && summarySection) {
		  summaryList.innerHTML = `
			<li><strong>Total processed:</strong> ${importStats.total}</li>
			<li class="success"><strong>Success:</strong> ${importStats.success}</li>
			<li class="duplicate"><strong>Duplicate:</strong> ${importStats.duplicate}</li>
			<li class="missing"><strong>Missing Image:</strong> ${importStats.missingImage}</li>
			<li class="draft"><strong>Saved as Draft:</strong> ${importStats.draft}</li>
			<li class="error"><strong>Error/Failed:</strong> ${importStats.error}</li>
		  `;
		  summarySection.style.display = 'block';
		}

		// Tampilkan toast notifikasi selesai
		showToast('Import completed. Check Import Log for details.', 'success');
		document.querySelector('.import-log-section').style.display = 'block';

		// Reset status proses
		isRunning = isPaused = isStopped = false;
		return;
	  }

	  // Ambil row saat ini
	  const row   = rows[index];
	  const url   = row.dataset.url;
	  const title = row.querySelector('.ai-item-title')?.textContent.trim() || 'Item';
	  const badge = row.querySelector('.status-badge');
	  const text  = row.querySelector('.status-text');

	  // Update UI row menjadi "processing"
	  row.classList.add('processing');
	  badge.className = 'status-badge badge-processing';
	  badge.textContent = 'Processing...';
	  text.textContent = 'Processing...';
	  currentGame.textContent = `Processing... ${title} (${index + 1}/${rows.length})`;

	  // Update progress modal
	  updateImportProgressKeModal(index, rows.length, title, ''); 

	  // Kirim request AJAX untuk import post
	  fetch(ajaxurl, {
		method: 'POST',
		headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
		body: `action=auto_submit_post&wp_url=${encodeURIComponent(url)}&nonce=${nonce}`,
		signal: AbortSignal.timeout(120000) // timeout 120 detik
	  })
	  .then(r => r.json())
	  .then(res => {
		// Hapus status processing
		row.classList.remove('processing');

		let statusText = '';
		let logStatus = 'Success';
		let extraInfo = '';
		let logMessage = '';
		let logType = 'info';

		if (res.success) {
		  // Jika import sukses
		  row.classList.add('success', 'imported');
		  saveImportedLink(url); // simpan ke localStorage
		  badge.className = 'status-badge badge-success';
		  badge.textContent = 'Success';

		  logMessage = `Success: ${title} imported/updated.`;
		  logType = 'success';

		  const editLink = res.data?.edit_link || '';
		  text.innerHTML = editLink
			? `Success | <a href="${editLink}" target="_blank" class="edit-post-link">Edit</a>`
			: 'Success';

		  if (res.data?.edit_link) {
			logMessage += ` <a href="${res.data.edit_link}" target="_blank" class="text-blue-600 underline">Edit post</a>`;
		  }

		  statusText = 'Success';
		  extraInfo = res.data?.edit_link ? 'with edit link' : '';

		  importStats.success++;
		} else {
		  // Jika import gagal / error
		  const serverMessage = res.data?.message || 'Unknown error';

		  row.classList.add('error');
		  badge.className = 'status-badge badge-error';
		  badge.textContent = serverMessage;
		  text.textContent = serverMessage;

		  // Tangani tipe error khusus
		  if (serverMessage.toLowerCase().includes('duplicate') || serverMessage.toLowerCase().includes('already exists')) {
			logType = 'warning';
			logMessage = `Duplicate detected: ${title} → ${serverMessage}`;
			importStats.duplicate++;
		  } else if (serverMessage.toLowerCase().includes('image') || serverMessage.toLowerCase().includes('featured') || serverMessage.toLowerCase().includes('poster')) {
			logType = 'warning';
			logMessage = `Missing/failed featured image: ${title} → ${serverMessage}`;
			importStats.missingImage++;
		  } else if (serverMessage.toLowerCase().includes('draft') || serverMessage.toLowerCase().includes('forced to draft')) {
			logType = 'warning';
			logMessage = `Saved as Draft: ${title} (No App ID/Package Name)`;
			importStats.draft++;
		  } else if (serverMessage.toLowerCase().includes('gp_id') || serverMessage.toLowerCase().includes('package name') || serverMessage.toLowerCase().includes('app id')) {
			logType = 'warning';
			logMessage = `No App ID / Package Name: ${title} → forced draft`;
		  } else {
			logType = 'error';
			logMessage = `Failed: ${title} → ${serverMessage}`;
			importStats.error++;
		  }

		  // Tampilkan form manual jika gagal
		  showManualForm(row);
		}

		// Tambahkan ke recent logs
		addRecentLog(title, logType.charAt(0).toUpperCase() + logType.slice(1), '', res.data?.edit_link || '');

		// Tambahkan ke import logs
		addImportLog(logMessage, logType);
	  })
	  .catch(err => {
		// Tangani error koneksi / timeout
		row.classList.remove('processing');
		row.classList.add('error');

		badge.className = 'status-badge badge-error';
		badge.textContent = err.name === 'TimeoutError' ? 'Timeout' : 'Connection Error';
		text.textContent = badge.textContent;

		const errorMsg = err.name === 'TimeoutError' ? 'Timeout (120s)' : 'Connection Error';
		const fullMessage = `Error processing ${title}: ${errorMsg}`;

		addImportLog(fullMessage, 'error');
		importStats.error++;

		showManualForm(row);
	  })
	  .finally(() => {
		// Lanjut ke item berikutnya setelah delay acak
		index++;
		progressBar.style.width = Math.round((index / rows.length) * 100) + '%';
		progressText.textContent = `${index} / ${rows.length}`;

		timeoutId = setTimeout(processNext, 2200 + Math.random() * 2800);

		// Update progress modal
		updateImportProgressKeModal(index, rows.length, title, ''); 
	  });

	  // Tampilkan modal notifikasi saat import berjalan
	  showImportNotification();
	}
 
	// Jika tombol Start ada
	if (btnStart) {
	  btnStart.onclick = () => {
		// Jika import sudah berjalan, hentikan agar tidak tumpang tindih
		if (isRunning) return;

		// Sembunyikan semua form manual
		hideAllManualForms();

		// Tandai proses sedang berjalan
		isRunning = true;
		btnStart.classList.add('running');
		startLabel.textContent = 'Running';

		// Aktifkan tombol Pause & Stop
		btnPause.disabled = false;
		btnStop.disabled = false;

		// Nonaktifkan field pengaturan dan tombol save/reset agar tidak diubah saat import berjalan
		disableSettingsFields();
		disableSettingsButtons(); 
		controlsWrapper?.classList.add('is-sticky'); // buat controls tetap terlihat saat scroll

		// Tambahkan tooltip pada tombol Save & Reset untuk memberi info bahwa import sedang berjalan
		addTooltip(btnSaveSettings, 'Importer is running');
		addTooltip(btnResetSettings, 'Importer is running');

		// Tampilkan toast notifikasi singkat
		showToast('🚀 Importer is running… Please wait', 'success');

		// Tampilkan modal notifikasi import dengan total item
		showImportNotification(rows.length);

		// Tampilkan progress bar utama
		showProgress();

		// Mulai proses import pertama
		processNext();
	  };
	}
	
	// ====================================
	// Tombol Pause / Lanjut
	// ====================================
	if (btnPause) {
	  btnPause.onclick = () => {
		// Toggle status paused
		isPaused = !isPaused;

		// Ubah label tombol sesuai status
		pauseLabel.textContent = isPaused ? 'Continue' : 'Pause';

		// Jika import dilanjutkan, panggil processNext() untuk melanjutkan proses
		if (!isPaused) processNext();
	  };
	}

	// ====================================
	// Tombol Stop / Hentikan import
	// ====================================
	if (btnStop) {
	  btnStop.onclick = () => {
		// Tandai status import dihentikan 
		isStopped = true;
		isPaused = false; // pastikan tidak stuck di pause


		// Hentikan timeout loop processNext
		if (timeoutId) clearTimeout(timeoutId);
	 
		// Batalkan request fetch yang sedang berjalan
		if (typeof controller !== 'undefined') {
		  controller.abort(); // controller adalah AbortController untuk fetch
		}

		// Reset UI ke kondisi awal
		resetUI();

		// Aktifkan kembali tombol Save & Reset
		enableSettingsButtons();

		// Hapus sticky class dari controls wrapper
		controlsWrapper?.classList.remove('is-sticky');

		// Sembunyikan controls wrapper
		controlsWrapper.style.display = 'none';

		// Hapus tooltip dari tombol Save & Reset
		removeTooltip(btnSaveSettings);
		removeTooltip(btnResetSettings);

		// Sembunyikan modal notifikasi import
		hideImportNotification();

		// Tampilkan toast notifikasi bahwa import dihentikan
		showToast('⛔ Import stopped', 'warning');
	  };
	}

	
	
});