include_once("load_external_chart_data.php");

// Style override if not on subpage
if ($pageObject->pageName !== "list1")
    $xt->assign("stylename", "jobslist");

// Reset category session filters
$_SESSION["active_category"] = "";
$_SESSION["active_category_name"] = "";

// Breadcrumb detection from TypeID filters
$find = array();
preg_match_all("/\(TypeID~equals~(.+)\)/U", postvalue("f"), $find, PREG_PATTERN_ORDER);
if (count($find[1]) > 0 && $find[1][0]) {
    $_SESSION["active_category"] = $find[1][0];
    $_SESSION["active_category_name"] = DB::DBLookup("SELECT sType FROM jobsjobtype WHERE ID=" . $_SESSION["active_category"]);
    
    $xt->assign("breadcrumbs", true);
    $xt->assign("breadcrumb", true);
    $xt->assign_loopsection("crumb", [
        [
            "crumb_attrs" => 'href="' . GetTableLink("jobsjobs", "list") . '"',
            "crumb_title_link" => true,
            "crumb_title" => "All Jobs"
        ],
        [
            "crumb_attrs" => "",
            "crumb_title_span" => true,
            "crumb_title" => $_SESSION["active_category_name"]
        ]
    ]);
}

// Hide Apply and Subscribe buttons based on user state
if (Security::getUserGroup() !== "jobseeker") {
    $pageObject->hideItem("job_apply_now");
    $pageObject->hideItem("Subscribe_button");
}

// Job counters (internal)
$user_active = DB::Lookup("SELECT COUNT(*) FROM jobsjobs WHERE COALESCE(extended_due_date, due_date) > CURDATE()");
$user_expired7 = DB::Lookup("SELECT COUNT(*) FROM jobsjobs WHERE COALESCE(extended_due_date, due_date) <= CURDATE() AND COALESCE(extended_due_date, due_date) >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)");
$user_archived = DB::Lookup("SELECT COUNT(*) FROM jobsjobs WHERE COALESCE(extended_due_date, due_date) < DATE_SUB(CURDATE(), INTERVAL 7 DAY)");

$xt->assign("user_active", number_format($user_active) . " Active");
$xt->assign("user_expired7", number_format($user_expired7) . " Expired (7d)");
$xt->assign("user_archived", number_format($user_archived) . " Archived");

// Chart data for internal jobs (flip card)
$xt->assign("user_active_raw", $user_active);
$xt->assign("user_expired7_raw", $user_expired7);
$xt->assign("user_archived_raw", $user_archived);

// Pull external jobs from feed
include_once("merged_jobs_feed.php");
$jobsBySource = fetchJobsBySource(); // no search param

$html = "";

// Render job cards grouped by source
foreach ($jobsBySource as $source => $jobList) {
    if (empty($jobList)) continue;

    $sourceSlug = strtolower(preg_replace('/[^a-zA-Z0-9]+/', '-', $source));
    $html .= "<h3 style='text-align:center; margin-top:30px;'>🌍 " . htmlspecialchars($source) . "</h3>";
    $html .= "<div class='jobs-grid'>";

    foreach ($jobList as $job) {
        $title = htmlspecialchars($job['title']);
        $company = htmlspecialchars($job['company']);
        $type = htmlspecialchars($job['type']);
        $location = htmlspecialchars($job['location']);
        $desc = htmlspecialchars($job['excerpt_full']);
        $descPreview = mb_substr($desc, 0, 160);
        $hasMoreDesc = mb_strlen($desc) > 160;
        $url = htmlspecialchars($job['url']);

        $expiryLabel = '';
        if (!empty($job['expiry_date'])) {
            $ts = is_numeric($job['expiry_date']) ? (int)$job['expiry_date'] : strtotime($job['expiry_date']);
            $daysRemaining = floor(($ts - time()) / 86400);
            $expiryLabel = date("d M Y", $ts);

            if ($daysRemaining < 0) {
                $expiryLabel .= " <span class='expired-tag'>🔒 Expired</span>";
            } elseif ($daysRemaining <= 7) {
                $expiryLabel .= " <span class='closing-soon-animated'>🔴 Closing in {$daysRemaining} days</span>";
            }
        }

        $html .= "<div class='job-card card-{$sourceSlug}'>";
        $html .= "<h3>{$title}</h3>";
        $html .= "<p><strong>Company:</strong> {$company}</p>";
        $html .= "<p><strong>Type:</strong> {$type}</p>";
        $html .= "<p><strong>Location:</strong> {$location}</p>";
        $html .= "<p><strong>Expires:</strong> {$expiryLabel}</p>";
        $html .= "<p><strong>Description:</strong><br>";
        $html .= "<span class='desc-preview'>{$descPreview}" . ($hasMoreDesc ? "..." : "") . "</span>";
        if ($hasMoreDesc) {
            $html .= "<span class='desc-full' style='display:none;'>{$desc}</span>";
            $html .= "<a href='javascript:void(0)' class='toggle-desc' onclick='toggleDescription(this)'>Read more</a>";
        }
        $html .= "</p>";

        $html .= "<a class='view-job-btn' href='track_remote_click.php?url=" . urlencode($url) .
                 "&title=" . urlencode($job['title']) .
                 "&company=" . urlencode($job['company']) . "' target='_blank'>View Job</a>";

        $html .= "<div class='card-hover-tip'>
            <span class='close-tip' onclick='this.parentElement.style.display=\"none\"'>✖</span>
            💡 Great fit if you’ve got experience in <strong>{$title}</strong>
        </div>";

        $html .= "</div>"; // close job-card
    }

    $html .= "</div>"; // close jobs-grid
}

// Assign merged output
$xt->assign("external_jobs", $html);

// Optional fallback if no jobs
if (count($jobsBySource) === 0) {
    $xt->assign("external_jobs", "<div class='no-jobs'>❌ No external jobs available at this time.</div>");
}
