<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', '/tmp/listdns-error.log');
error_reporting(E_ALL);

require_once __DIR__ . '/../lib/bootstrap.php';

header('Content-Type: text/html');

$namedConfPath = '/etc/named.rfc1912.zones';
$zoneDir       = '/var/named/chroot/var/named';

$zones = load_zones($namedConfPath);

echo "<link rel='stylesheet' href='/backend/assets/dns.css'>";
echo "<script src='/backend/assets/dns.js'></script>";
echo "<div class='dns-wrapper'>";

/********************************************************************
 * 1️⃣ SAVE ZONE
 ********************************************************************/
if (isset($_POST['savezone'])) {

    $zone     = basename($_POST['savezone']);
    $content  = $_POST['zonecontent'];

    // bump serial
    $content = bump_serial($content);

    // backup
    backup_zonefile($zoneDir, $zone);

    // save
    save_zonefile($zoneDir, $zone, $content);

    // validate
    $zonefile = "$zoneDir/$zone.hosts";
    $output   = validate_zone($zone, $zonefile);

    if (strpos($output, 'OK') !== false) {
        shell_exec("rndc reload " . escapeshellarg($zone));
        echo "<div class='dns-success'>Zone updated, serial bumped, validated, and reloaded.</div>";
    } else {
        echo "<div class='dns-error'>Zone validation failed:<br><pre>" . htmlspecialchars($output) . "</pre></div>";
    }

    echo render_zone_editor($zone, $content);
    echo "</div>";
    exit;
}

/********************************************************************
 * 2️⃣ EDIT ZONE
 ********************************************************************/
if (isset($_POST['editzone'])) {

    $zone     = basename($_POST['editzone']);
    $content  = load_zonefile($zoneDir, $zone);

    if ($content === false || $content === null) {
        echo "<div class='dns-error'>Zonefile not found: " . htmlspecialchars($zone) . "</div>";
        echo "</div>";
        exit;
    }

    // SOA + records parsed only when content is valid
    $soa     = parse_soa($content);
    $records = parse_records($content);

    echo render_soa_editor($zone, $soa);
    echo render_dns_record_table($zone, $records);
    echo render_zone_editor($zone, $content);
    echo "</div>";
    exit;
}

/********************************************************************
 * 3️⃣ DEFAULT VIEW — DOMAIN LIST
 ********************************************************************/
$validZones = array_filter($zones, function ($zone) use ($zoneDir) {
    // Skip internal or reverse zones
    if (preg_match('/^(localhost|localdomain|0\.|1\.0\.0\.127\.|ip6\.arpa|\.|in-addr\.arpa)/i', $zone)) {
        return false;
    }

    // Only include zones with existing zonefiles
    return file_exists("$zoneDir/$zone.hosts");
});

echo render_domain_list($validZones);
echo "</div>";
?>
