<?php
declare(strict_types=1);
require __DIR__ . '/_bootstrap.php';

if (request_is_post()) {
    verify_csrf();
    $action = admin_post_string('action', 'create');

    try {
        if ($action === 'test_api') {
            $result = gemini_test_connection();
            if ($result['active']) {
                flash('success', 'Gemini API aktif. Model bağlantısı başarıyla doğrulandı.');
            } else {
                flash('error', 'Gemini API testi başarısız: ' . $result['message']);
            }
            redirect('/admin/automation.php');
        }

        if ($action === 'create') {
            $topics = array_values(array_unique(array_filter(array_map(
                'trim',
                preg_split('/\r?\n/', admin_post_string('topics')) ?: []
            ))));
            if (!$topics) throw new RuntimeException('En az bir konu girin.');
            if (gemini_api_key() === '') throw new RuntimeException('Önce Site Ayarları bölümünden Gemini API anahtarını kaydedin.');

            $frequency = admin_post_string('frequency', 'once');
            $publishMode = admin_post_string('publish_mode', 'draft');
            if (!in_array($frequency, ['once', 'daily', 'weekly'], true)) {
                throw new RuntimeException('Otomasyon planı geçersiz.');
            }
            if (!in_array($publishMode, ['draft', 'published'], true)) {
                throw new RuntimeException('Yayın modu geçersiz.');
            }

            if (count($topics) > 255) {
                throw new RuntimeException('Tek otomasyonda en fazla 255 konu kullanılabilir.');
            }
            $linkRules = parse_automation_link_rules(admin_post_string('link_rules'));
            $batch = count($topics); // Eski veritabanı alanı; gerçek adet her zaman konu sayısıdır.
            $model = admin_post_string('model', (string) setting('gemini_model', 'gemini-2.5-flash-lite'));
            $automationPayload = [
                'topics' => $topics,
                'links' => $linkRules,
            ];

            $stmt = db()->prepare('INSERT INTO content_automations
                (name,topics_json,frequency,batch_size,publish_mode,booking_service_id,model,is_active,next_run_at,last_result,created_at,updated_at)
                VALUES(?,?,?,?,?,?,?,?,NOW(),?,NOW(),NOW())');
            $stmt->execute([
                admin_post_string('name', 'İçerik otomasyonu'),
                json_encode($automationPayload, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
                $frequency,
                $batch,
                $publishMode,
                (int) ($_POST['booking_service_id'] ?? 0) ?: null,
                $model,
                1,
                'İlk çalışma başlatılıyor',
            ]);
            $id = (int) db()->lastInsertId();
            audit_log('create', 'content_automations', $id, $batch . ' makalelik otomasyon oluşturuldu');
            redirect('/admin/automation.php?autorun=' . $id);
        }

        if ($action === 'run') {
            $id = (int) ($_POST['id'] ?? 0);
            $stmt = db()->prepare('SELECT id FROM content_automations WHERE id=? LIMIT 1');
            $stmt->execute([$id]);
            if (!$stmt->fetchColumn()) throw new RuntimeException('Otomasyon bulunamadı.');

            db()->prepare('UPDATE content_automations SET is_active=1,next_run_at=NULL,last_result=?,updated_at=NOW() WHERE id=?')
                ->execute(['Elle çalışma başlatılıyor', $id]);
            redirect('/admin/automation.php?autorun=' . $id);
        }

        if ($action === 'toggle') {
            db()->prepare('UPDATE content_automations SET is_active=1-is_active,updated_at=NOW() WHERE id=?')
                ->execute([(int) ($_POST['id'] ?? 0)]);
            flash('success', 'Otomasyon durumu değiştirildi.');
        } elseif ($action === 'delete') {
            db()->prepare('DELETE FROM content_automations WHERE id=?')->execute([(int) ($_POST['id'] ?? 0)]);
            flash('success', 'Otomasyon silindi.');
        }
    } catch (Throwable $e) {
        flash('error', $e->getMessage());
    }
    redirect('/admin/automation.php');
}

$services = db()->query('SELECT id,name FROM services WHERE is_active=1 ORDER BY sort_order,name')->fetchAll();
$items = db()->query('SELECT a.*,s.name service_name FROM content_automations a LEFT JOIN services s ON s.id=a.booking_service_id ORDER BY a.id DESC')->fetchAll();
$api = gemini_api_status_info();

$autorunId = max(0, (int) ($_GET['autorun'] ?? 0));
$autorunTotal = 0;
$autorunName = '';
if ($autorunId > 0) {
    $stmt = db()->prepare('SELECT * FROM content_automations WHERE id=? LIMIT 1');
    $stmt->execute([$autorunId]);
    $autorun = $stmt->fetch();
    if ($autorun) {
        $autorunTotal = count(automation_topics($autorun));
        $autorunName = (string) $autorun['name'];
    }
}

$frequencyLabels = ['once' => 'Tek sefer', 'daily' => 'Her gün', 'weekly' => 'Her hafta'];
$publishLabels = ['draft' => 'Taslak', 'published' => 'Yayında'];
$statusClass = match ($api['state']) {
    'active' => 'active',
    'untested' => 'pending',
    default => 'inactive',
};

admin_header('Yapay Zekâ Merkezi');
?>

<div class="panel" style="margin-top:0">
    <div class="panel-head">
        <div>
            <h2>Gemini API bağlantısı</h2>
            <p class="help" style="margin-bottom:0">Makale üretmeden önce API durumunu buradan görebilir ve test edebilirsiniz.</p>
        </div>
        <form method="post" class="actions">
            <?= csrf_field() ?>
            <button class="button secondary" name="action" value="test_api" type="submit">API Bağlantısını Test Et</button>
        </form>
    </div>
    <div class="panel-body">
        <span class="badge <?= e($statusClass) ?>" style="font-size:.85rem;padding:7px 11px"><?= e($api['label']) ?></span>
        <?php if ($api['last_test'] !== ''): ?>
            <span class="muted" style="margin-left:10px">Son test <?= e($api['last_test']) ?></span>
        <?php endif; ?>
        <?php if ($api['error'] !== ''): ?>
            <p style="margin:12px 0 0;color:#8e2e26"><b>Hata:</b> <?= e($api['error']) ?></p>
        <?php endif; ?>
    </div>
</div>

<?php if ($autorunId > 0 && $autorunTotal > 0): ?>
<div class="panel" id="automation-runner" style="border-color:#b89a68">
    <div class="panel-head">
        <div>
            <h2>Makaleler oluşturuluyor</h2>
            <p class="help" style="margin-bottom:0"><?= e($autorunName) ?> çalışması tamamlanana kadar bu sayfayı açık bırakın.</p>
        </div>
        <span class="badge pending" id="runner-badge">Hazırlanıyor</span>
    </div>
    <div class="panel-body">
        <div style="height:12px;background:#e7ece9;border-radius:999px;overflow:hidden">
            <div id="runner-progress" style="height:100%;width:0;background:#17352f;transition:width .25s"></div>
        </div>
        <p id="runner-message" style="margin:14px 0 0">Gemini bağlantısı kuruluyor…</p>
        <div id="runner-posts" style="margin-top:12px"></div>
        <div class="actions" id="runner-actions" style="margin-top:16px;display:none">
            <a class="button" href="<?= e(url('/admin/posts.php')) ?>">Oluşturulan Makalelere Git</a>
            <a class="button secondary" href="<?= e(url('/admin/automation.php')) ?>">Otomasyonlara Dön</a>
        </div>
    </div>
</div>
<?php endif; ?>

<div class="split-admin">
    <div class="panel" style="margin-top:24px">
        <div class="panel-head"><h2>İçerik otomasyonları</h2></div>
        <div class="table-wrap">
            <table>
                <thead><tr><th>Ad</th><th>Plan</th><th>Konular</th><th>Son çalışma</th><th>Durum</th><th>İşlem</th></tr></thead>
                <tbody>
                <?php if (!$items): ?>
                    <tr><td colspan="6" class="muted">Henüz otomasyon oluşturulmadı.</td></tr>
                <?php endif; ?>
                <?php foreach ($items as $a): ?>
                    <tr>
                        <td>
                            <b><?= e($a['name']) ?></b><br>
                            <span class="muted"><?= e($a['model']) ?> · <?= e($publishLabels[$a['publish_mode']] ?? $a['publish_mode']) ?></span>
                        </td>
                        <td>
                            <?= e($frequencyLabels[$a['frequency']] ?? $a['frequency']) ?><br>
                            <span class="muted"><?= e($a['next_run_at'] ?: 'Elle çalıştırılır') ?></span>
                        </td>
                        <td><b><?= count(automation_topics($a)) ?></b> makale<?php $linkCount = count(automation_link_rules($a)); if ($linkCount > 0): ?><br><span class="muted"><?= $linkCount ?> bağlantı kuralı</span><?php endif; ?></td>
                        <td>
                            <?= e($a['last_run_at'] ?: '—') ?><br>
                            <span class="muted" style="<?= str_starts_with((string) $a['last_result'], 'Hata:') ? 'color:#8e2e26' : '' ?>"><?= e($a['last_result'] ?: 'Henüz çalışmadı') ?></span>
                        </td>
                        <td><?= admin_status($a['is_active'] ? 'active' : 'inactive') ?></td>
                        <td>
                            <form method="post" class="actions">
                                <?= csrf_field() ?>
                                <input type="hidden" name="id" value="<?= (int) $a['id'] ?>">
                                <button class="button small" name="action" value="run">Şimdi Oluştur</button>
                                <button class="button small secondary" name="action" value="toggle"><?= $a['is_active'] ? 'Durdur' : 'Aç' ?></button>
                                <button class="button small danger" name="action" value="delete" data-confirm="Otomasyon silinsin mi?">Sil</button>
                            </form>
                        </td>
                    </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>

    <form class="panel" style="margin-top:24px" method="post">
        <div class="panel-head"><h2>Yeni otomasyon</h2></div>
        <div class="panel-body form-grid" style="grid-template-columns:1fr">
            <?= csrf_field() ?>
            <input type="hidden" name="action" value="create">
            <div>
                <label>Otomasyon adı</label>
                <input name="name" value="İstanbul wellness içerikleri" required>
            </div>
            <div>
                <label>Konular</label>
                <textarea name="topics" rows="9" placeholder="Esenyurt spa merkezi&#10;İstanbul wellness merkezi&#10;Otel spa deneyimi" required></textarea>
                <p class="help">Her dolu satır için bir makale hazırlanır. Ayrı bir adet seçmenize gerek yoktur; konu sayısı makale sayısıdır.</p>
            </div>
            <div>
                <label>Çalışma sıklığı</label>
                <select name="frequency">
                    <option value="once">Tek sefer</option>
                    <option value="daily">Her gün</option>
                    <option value="weekly">Her hafta</option>
                </select>
            </div>
            <div>
                <label>Makale içi bağlantılar</label>
                <textarea name="link_rules" rows="6" placeholder="spa merkezi | /hizmetler&#10;Nekrut Hotel | https://nekruthotel.com"></textarea>
                <p class="help">Her satıra <b>bağlantı verilecek kelime | URL</b> yazın. İç bağlantı veya dış bağlantı kullanılabilir. Sistem bağlantıyı yalnız paragraf veya liste içindeki ilk doğal kullanıma ekler; başlıklara link vermez. Kelime gövde metninde yoksa ilgili bağlantılar bölümüne ekler.</p>
            </div>
            <div>
                <label>Yayın modu</label>
                <select name="publish_mode">
                    <option value="draft">Taslak ve yönetici onayı</option>
                    <option value="published">Doğrudan yayınla</option>
                </select>
            </div>
            <div>
                <label>Makale altı rezervasyon hizmeti</label>
                <select name="booking_service_id">
                    <option value="">Genel rezervasyon</option>
                    <?php foreach ($services as $s): ?>
                        <option value="<?= (int) $s['id'] ?>"><?= e($s['name']) ?></option>
                    <?php endforeach; ?>
                </select>
            </div>
            <div>
                <label>Model</label>
                <input name="model" value="<?= e(setting('gemini_model', 'gemini-2.5-flash-lite')) ?>">
            </div>
            <button class="button" type="submit">Otomasyonu Oluştur ve Makaleleri Hazırla</button>
        </div>
    </form>
</div>

<div class="panel">
    <div class="panel-head"><h2>Tekrarlanan otomasyonlar için cron</h2></div>
    <div class="panel-body">
        <p>İlk makaleler artık otomasyon oluşturulduğu anda hazırlanır. Her gün veya her hafta tekrar çalışması için cPanel Cron Jobs alanına aşağıdaki komutu ekleyin:</p>
        <p><span class="code">php <?= e(dirname(__DIR__) . '/cron/content-automation.php') ?></span></p>
        <p class="muted">Önerilen cron sıklığı 10 dakikada birdir. Tek seferlik içerik üretimi için cron gerekmez.</p>
    </div>
</div>

<?php if ($autorunId > 0 && $autorunTotal > 0): ?>
<script>
(() => {
    const automationId = <?= (int) $autorunId ?>;
    const total = <?= (int) $autorunTotal ?>;
    const csrf = <?= json_encode(csrf_token(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
    const endpoint = <?= json_encode(url('/admin/automation-run.php'), JSON_UNESCAPED_SLASHES) ?>;
    const progress = document.getElementById('runner-progress');
    const message = document.getElementById('runner-message');
    const badge = document.getElementById('runner-badge');
    const posts = document.getElementById('runner-posts');
    const actions = document.getElementById('runner-actions');

    async function runStep(step) {
        message.textContent = `${step}/${total} makale Gemini ile hazırlanıyor. Bu işlem biraz sürebilir…`;
        badge.textContent = `${step}/${total}`;

        const body = new URLSearchParams({
            _csrf: csrf,
            id: String(automationId),
            step: String(step),
            total: String(total)
        });

        const response = await fetch(endpoint, {
            method: 'POST',
            credentials: 'same-origin',
            headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'},
            body: body.toString()
        });

        let data;
        try {
            data = await response.json();
        } catch (error) {
            throw new Error(`Sunucu geçersiz yanıt döndürdü. HTTP ${response.status}`);
        }
        if (!response.ok || !data.ok) {
            throw new Error(data.message || `İşlem başarısız. HTTP ${response.status}`);
        }

        const row = document.createElement('div');
        row.style.cssText = 'padding:9px 11px;margin-top:7px;background:#f3f5f4;border-radius:8px';
        if (data.result.skipped) {
            row.style.background = '#fff1ef';
            row.textContent = `⚠ ${data.result.topic}: ${data.result.error}`;
            posts.appendChild(row);
            progress.style.width = `${Math.round((step / total) * 100)}%`;
            return false;
        }
        const item = data.result.post;
        row.textContent = `✓ ${item.title} (${item.status === 'published' ? 'yayında' : 'taslak'})`;
        posts.appendChild(row);
        progress.style.width = `${Math.round((step / total) * 100)}%`;
        return true;
    }

    (async () => {
        try {
            let created = 0;
            let skipped = 0;
            for (let step = 1; step <= total; step++) {
                const success = await runStep(step);
                success ? created++ : skipped++;
            }
            badge.className = skipped > 0 ? 'badge pending' : 'badge active';
            badge.textContent = skipped > 0 ? 'Kontrol gerekli' : 'Tamamlandı';
            message.textContent = skipped > 0
                ? `${created} makale oluşturuldu, ${skipped} konu atlandı. Diğer konular çalıştırılmaya devam etti.`
                : `${created} makale başarıyla oluşturuldu.`;
            actions.style.display = 'flex';
            history.replaceState({}, '', <?= json_encode(url('/admin/automation.php'), JSON_UNESCAPED_SLASHES) ?>);
        } catch (error) {
            badge.className = 'badge inactive';
            badge.textContent = 'Hata';
            message.innerHTML = '<b>Makale üretilemedi:</b> ' + String(error.message).replace(/[&<>"']/g, s => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#039;'}[s]));
            actions.style.display = 'flex';
        }
    })();
})();
</script>
<?php endif; ?>

<?php admin_footer(); ?>
