<?php
// Load file db.php yang sudah Anda miliki
require_once 'db.php';

/**
 * Fungsi untuk mengecek apakah sebuah URL adalah valid RSS/Atom feed dan bisa diakses.
 *
 * @param string $url URL feed yang akan dicek.
 * @return bool True jika valid dan bisa diakses, False sebaliknya.
 */
function check_rss_exists($url) {
    // 1. Cek apakah URL valid
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }

    // 2. Inisialisasi cURL untuk request
    $ch = curl_init($url);
    
    // Set opsi cURL
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // Jangan download seluruh konten (body), hanya header saja (lebih cepat)
    curl_setopt($ch, CURLOPT_NOBODY, true); 
    // Ikuti redirect jika ada (misal dari http ke https)
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    // Timeout agak lama sedikit untuk koneksi lambat
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    // Set user agent (beberapa server memblokir request tanpa user agent)
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36');

    // Eksekusi request
    curl_exec($ch);
    
    // Ambil HTTP status code
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    // Cek error pada cURL
    $curl_error = curl_error($ch);
    
    curl_close($ch);

    // Jika terjadi error pada cURL (misal tidak bisa resolve host)
    if ($curl_error) {
        return false;
    }

    // Jika HTTP Code 200 (OK), kemungkinan besar feed tersebut ada
    // Kita asumsikan HTTP 200 berarti valid untuk feed
    if ($http_code == 200) {
        return true;
    }

    return false;
}

// Tangkap input pencarian dan penggantian teks dari form
$find_text = $_POST['find_text'] ?? '';
$replace_text = $_POST['replace_text'] ?? '';

// Ambil data dari tabel media
try {
    $stmt = $pdo->query("SELECT * FROM media");
    $media_list = $stmt->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
    die("Gagal mengambil data: " . $e->getMessage());
}

// Proses Replace URL jika input "Cari Teks URL" diisi
if ($find_text !== '') {
    foreach ($media_list as $key => $media) {
        // Ganti teks pada kolom url secara langsung di memori list
        $media_list[$key]['url'] = str_replace($find_text, $replace_text, $media['url']);
    }
}

// Jika tombol Export ditekan
if (isset($_POST['export_xml'])) {
    // Bersihkan output buffer untuk mencegah pesan error/spasi kosong masuk ke XML
    if (ob_get_length()) ob_clean();
    
    // Set header agar browser mendownload file sebagai XML
    header('Content-Type: text/xml; charset=utf-8');
    header('Content-Disposition: attachment; filename="data_rss_media.xml"');

    // Buat objek XML (Root element: <data>)
    $xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><data></data>');

    // Looping data yang sudah difilter/direplace
    foreach ($media_list as $media) {
        $item = $xml->addChild('item');
        $item->addChild('id', htmlspecialchars($media['id']));
        $item->addChild('instansi_id', ''); // Dikosongkan sesuai format tujuan
        $item->addChild('nama', htmlspecialchars($media['nama']));
        $item->addChild('url', htmlspecialchars($media['url'])); // URL yg sudah tereplace
        $item->addChild('kategori', ''); // Dikosongkan sesuai format tujuan
    }

    // Cetak hasil XML dan hentikan script agar HTML dibawahnya tidak ikut terdownload
    echo $xml->asXML();
    exit();
}

?>
<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Pengecek RSS Feed</title>
    <style>
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background-color: #f4f7f6;
            color: #333;
            line-height: 1.6;
            padding: 20px;
        }
        .container {
            max-width: 800px;
            margin: 0 auto;
            background: #fff;
            padding: 30px;
            border-radius: 8px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        h1 {
            text-align: center;
            color: #2c3e50;
            margin-bottom: 20px;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
        }
        th, td {
            padding: 12px 15px;
            border-bottom: 1px solid #ddd;
            text-align: left;
        }
        th {
            background-color: #34495e;
            color: white;
            font-weight: 600;
        }
        tr:hover {
            background-color: #f5f5f5;
        }
        /* Style untuk ikon status */
        .status-icon {
            font-size: 1.5em;
            text-align: center;
            display: block;
        }
        .status-success {
            color: #2ecc71; /* Hijau untuk centang */
        }
        .status-error {
            color: #e74c3c; /* Merah untuk silang */
        }
        .url-text {
            word-break: break-all;
            font-size: 0.9em;
            color: #555;
        }
        
        .action-form {
            background: #f8f9fa;
            padding: 20px;
            border-radius: 8px;
            margin-bottom: 25px;
            border: 1px solid #e9ecef;
            display: flex;
            gap: 20px;
            align-items: flex-end;
            flex-wrap: wrap;
        }
        .form-group {
            display: flex;
            flex-direction: column;
            gap: 8px;
            flex: 1;
            min-width: 200px;
        }
        .form-group label {
            font-weight: 600;
            font-size: 0.9em;
            color: #2c3e50;
        }
        .form-group input {
            padding: 10px;
            border: 1px solid #ccc;
            border-radius: 5px;
            font-size: 14px;
        }
        .btn-group {
            display: flex;
            gap: 10px;
        }
        .btn {
            padding: 10px 18px;
            border: none;
            border-radius: 5px;
            cursor: pointer;
            font-weight: bold;
            color: white;
            transition: opacity 0.2s;
            font-size: 14px;
        }
        .btn:hover {
            opacity: 0.8;
        }
        .btn-primary { background-color: #3498db; }
        .btn-success { background-color: #2ecc71; }
    </style>
</head>
<body>

<div class="container">
    <h1>Hasil Pengecekan RSS Feed</h1>
    
    <form method="POST" class="action-form">
        <div class="form-group">
            <label for="find_text">Ganti Teks URL (Cari):</label>
            <input type="text" id="find_text" name="find_text" value="<?php echo htmlspecialchars($find_text); ?>" placeholder="misal: banjarbaru">
        </div>
        <div class="form-group">
            <label for="replace_text">Menjadi (Replace):</label>
            <input type="text" id="replace_text" name="replace_text" value="<?php echo htmlspecialchars($replace_text); ?>" placeholder="misal: banjarmasin">
        </div>
        <div class="btn-group">
            <!-- Tombol untuk mensubmit form dan mengubah list di bawah -->
            <button type="submit" name="apply_replace" class="btn btn-primary">Terapkan & Cek</button>
            <!-- Tombol untuk mengekspor data yang sudah di-replace ke XML -->
            <button type="submit" name="export_xml" class="btn btn-success">&#128190; Export XML</button>
        </div>
    </form>
    
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Nama Media</th>
                <th>URL RSS</th>
                <th style="text-align:center;">Status</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($media_list as $media): ?>
                <?php 
                    // Cek status RSS untuk URL ini
                    $is_valid = check_rss_exists($media['url']); 
                ?>
                <tr>
                    <td><?php echo htmlspecialchars($media['id']); ?></td>
                    <td><?php echo htmlspecialchars($media['nama']); ?></td>
                    <td><span class="url-text"><?php echo htmlspecialchars($media['url']); ?></span></td>
                    <td>
                        <?php if ($is_valid): ?>
                            <!-- Simbol centang -->
                            <span class="status-icon status-success" title="RSS Ditemukan">&#10004;</span>
                        <?php else: ?>
                            <!-- Simbol silang -->
                            <span class="status-icon status-error" title="RSS Tidak Ditemukan">&#10008;</span>
                        <?php endif; ?>
                    </td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
    
    <p style="margin-top:20px; font-size: 0.9em; color: #7f8c8d;">
        <em>Catatan: Pengecekan dilakukan dengan melihat HTTP Status Code (200 OK). Ini adalah file contoh yang menyertakan data awal menggunakan SQLite.</em>
    </p>
</div>

</body>
</html>