<?php
require_once "../db.php";
session_start();

$isOver18 = $_SESSION['is_over_18'] ?? 0;

$offset = intval($_GET['offset'] ?? 0);
$limit  = intval($_GET['limit'] ?? 24);
$q      = trim($_GET['q'] ?? "");

$where  = [];
$params = [];

// NSFW filter
if (!$isOver18) {
    $where[] = "p.nsfw = 0";
}

// Search filter (title + tags)
if ($q !== "") {
    $where[] = "(p.title LIKE ? OR t.name LIKE ?)";
    $params[] = "%$q%";
    $params[] = "%$q%";
}

$whereSQL = $where ? "WHERE " . implode(" AND ", $where) : "";

// Query
$sql = "
SELECT 
    p.id,
    p.title,
    p.file_path,
    p.thumbnail_path,
    p.type,
    p.nsfw,
    u.username,
    p.created_at,
    GROUP_CONCAT(t.name) AS tags,
    (SELECT COUNT(*) FROM ratings r WHERE r.post_id = p.id) AS rating_count,
    (SELECT COUNT(*) FROM comments c WHERE c.post_id = p.id) AS comment_count
FROM posts p
JOIN users u ON p.user_id = u.id
LEFT JOIN post_tags pt ON p.id = pt.post_id
LEFT JOIN tags t ON pt.tag_id = t.id
$whereSQL
GROUP BY p.id
ORDER BY p.id DESC
LIMIT $limit OFFSET $offset
";

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

// Format output
foreach ($rows as &$r) {

    // PORTABLE PATHS — DO NOT PREFIX ANYTHING
    $r['file_url']      = $r['file_path'];       // e.g. "uploads/abc.jpg"
    $r['thumbnail_url'] = $r['thumbnail_path'];  // e.g. "thumbs/abc.jpg"

    // NSFW integer
    $r['nsfw'] = intval($r['nsfw']);

    // Tags array
    $r['tags'] = $r['tags'] ? explode(",", $r['tags']) : [];

    // Human date
    $r['created_human'] = $r['created_at'] 
        ? date("M j, Y", strtotime($r['created_at'])) 
        : "";
}

echo json_encode($rows);