const DEFAULT_PROMPTS = {
arch: `Peran Anda: SEO Expert bernama {{author}} ({{job}}).\nTugas: Riset mendalam untuk topik "{{topic}}".\nBerikan: Search Intent, Analisis Kompetitor Ringkas, 3 Angle Artikel Unik, dan 10 LSI Keyword.\nOutput: MARKDOWN MURNI.`,
draft: `Peran Anda: Penulis Artikel Profesional bernama {{author}}.\nTugas: Tulis artikel blog SEO friendly tentang "{{varA}}" di lokasi "{{varB}}".\nGaya: {{tone}}. CTA WhatsApp: {{wa}}.\nOutput WAJIB JSON MURNI:\n{"title":"Judul Artikel","meta":"Tulis ringkasan deskripsi SEO max 150 karakter disini","labels":"Label1,Label2","content":"
Isi HTML minimal 5 paragraf...
"}`,
seo1: `Peran: SEO Expert {{author}}.\nTugas: Riset komprehensif untuk topik "{{topic}}".\nBerikan: 1) Search Intent, 2) Kompetitor Analysis, 3) Pillar + Cluster ideas, 4) 15 LSI Keyword.\nFormat: MARKDOWN.`,
DRAFT
Tulis 1
Tulis Silo
Thumb
Publish 1
Publish Silo
function saveDraftFields() {
if (!G.activeDraftId) return;
const d = G.drafts.find(x=>x.id===G.activeDraftId);
if (!d) return;
d.title = document.getElementById('d-title').value;
d.meta = document.getElementById('d-meta').value.substring(0,150);
d.labels = document.getElementById('d-labels').value;
d.content = document.getElementById('d-content').value;
saveState();
}
// ============================================================
// AI COMPOSE: TULIS BERANTAI SELURUH ANTREAN (SILO)
// ============================================================
async function aiComposeSiloBerantai() {
if (G.drafts.length === 0) return toast('Tidak ada draf dalam antrean!','error');
if (!confirm(`Sistem akan otomatis menulis ${G.drafts.length} artikel secara berurutan. Lanjutkan?`)) return;
for (let i = 0; i < G.drafts.length; i++) {
const d = G.drafts[i];
// Hanya tulis yang masih berstatus 'Draf Baru'
if (d.status === 'Draf Baru') {
G.activeDraftId = d.id;
openDraft(d.id);
showLoader(true, `[${i+1}/${G.drafts.length}] AI Menulis: ${d.title||d.varB}...`);
try {
let p = G.prompts.draft
.replace(/\{\{topic\}\}/g, d.topic).replace(/\{\{varA\}\}/g, d.varA)
.replace(/\{\{varB\}\}/g, d.varB).replace(/\{\{author\}\}/g, G.config.author)
.replace(/\{\{job\}\}/g, G.config.job).replace(/\{\{wa\}\}/g, G.config.wa)
.replace(/\{\{tone\}\}/g, G.config.tone);
if (i > 0) { p += `\nPENTING: Sisipkan tautan HTML natural ke artikel panduan utama menggunakan URL persis: #URL_PILAR#`; }
if (i > 1) { p += `\nPENTING: Sisipkan tautan sekunder ke artikel terkait sebelumnya menggunakan URL persis: #URL_PREV#`; }
const json = await callAI(p, true);
// SMART FALLBACK: Menyedot key apapun yang dipakai AI
d.title = json.title || json.judul || '';
let metaRaw = json.meta || json.description || json.deskripsi || '';
if (metaRaw.includes('max 150')) metaRaw = ''; // Mitigasi jika AI menulis ulang prompt
d.meta = metaRaw.substring(0,150);
d.labels = json.labels || json.kategori || json.tags || '';
d.content = json.content || json.isi || '';
d.status = 'Draf Ditulis';
saveState(); openDraft(d.id);
// Human Pacing: Jeda 3-6 Detik antar artikel
const delay = Math.floor(Math.random() * 3000) + 3000;
await new Promise(r => setTimeout(r, delay));
} catch(e) {
toast(`Gagal menulis artikel ke-${i+1}: ${e.message}`,'error');
break; // Stop jika limit/error parah
}
}
}
showLoader(false);
toast('Proses Tulis Silo Berantai Selesai!','success');
}
// Menulis Draft AI dengan Injeksi Link Silo (1 Artikel Saja)
async function aiComposeDraft() {
if (!G.activeDraftId) return toast('Pilih draft dulu!','error');
const d = G.drafts.find(x=>x.id===G.activeDraftId);
const draftIndex = G.drafts.findIndex(x=>x.id===G.activeDraftId);
showLoader(true,'AI sedang menulis artikel...');
try {
let p = G.prompts.draft
.replace(/\{\{topic\}\}/g, d.topic).replace(/\{\{varA\}\}/g, d.varA)
.replace(/\{\{varB\}\}/g, d.varB).replace(/\{\{author\}\}/g, G.config.author)
.replace(/\{\{job\}\}/g, G.config.job).replace(/\{\{wa\}\}/g, G.config.wa)
.replace(/\{\{tone\}\}/g, G.config.tone);
// INJEKSI LOGIKA SILO (LABA-LABA)
if (draftIndex > 0) {
p += `\nPENTING: Sisipkan tautan HTML natural ke artikel panduan utama menggunakan URL persis: #URL_PILAR#`;
}
if (draftIndex > 1) {
p += `\nPENTING: Sisipkan tautan sekunder ke artikel terkait sebelumnya menggunakan URL persis: #URL_PREV#`;
}
const json = await callAI(p, true);
// SMART FALLBACK: Menyedot key apapun yang dipakai AI
d.title = json.title || json.judul || '';
let metaRaw = json.meta || json.description || json.deskripsi || '';
if (metaRaw.includes('max 150')) metaRaw = ''; // Mitigasi jika AI menulis ulang prompt
d.meta = metaRaw.substring(0,150);
d.labels = json.labels || json.kategori || json.tags || '';
d.content = json.content || json.isi || '';
d.status = 'Draf Ditulis'; saveState(); openDraft(d.id);
toast('Artikel berhasil ditulis oleh AI!','success');
} catch(e) { toast(e.message,'error'); }
showLoader(false);
}
function generateDraftThumb() {