<?php

// Prepare cURL object with options for the search query
function prepareSearchCurlObj($query, $bookmark = null, $url, $csrftoken = null, $header_function) {
    $data_param_obj = [
        "options" => [
            "query" => $query,
            "bookmarks" => $bookmark ? [$bookmark] : null
        ]
    ];

    $data_param = urlencode(json_encode(array_filter($data_param_obj['options'])));

    $headers = [];
    if ($csrftoken) {
        $headers[] = "x-csrftoken: $csrftoken";
        $headers[] = "cookie: csrftoken=$csrftoken";
    }

    $finalurl = $bookmark ? $url : "$url?data=$data_param";

    $ch = curl_init($finalurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADERFUNCTION, $header_function);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    if ($bookmark) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "data=$data_param");
    }

    return $ch;
}

// Search function to execute the cURL request and process the response
function search($query, $bookmark, $url, $csrftoken, $header_function) {
    $ch = prepareSearchCurlObj($query, $bookmark, $url, $csrftoken, $header_function);
    
    $response = curl_exec($ch);
    
    if ($response === false) {
        // Handle cURL error
        $error = curl_error($ch);
        curl_close($ch);
        return json_encode(['error' => 'CURL Error: ' . $error]);
    }

    curl_close($ch); // Close cURL handle

    $data = json_decode($response);
    $images = [];

    if (isset($data->resource_response->data->results)) {
        foreach ($data->resource_response->data->results as $result) {
            $url = $result->images->orig->url ?? null; // Use null coalescing for safety
            if ($url) {
                $images[] = $url;
            }
        }
    }

    $result = new SearchResult();
    $result->images = $images;
    $result->bookmark = $data->resource_response->bookmark ?? null;

    return $result;
}

// Main execution
header("Content-Type: application/json");
$result = search($query, $bookmark, $url, $csrftoken, $header_function);

// Handle bookmark for pagination
if ($result->bookmark) {
    $query_encoded = urlencode($query);
    $bookmark_encoded = urlencode($result->bookmark);
    $csrftoken_encoded = urlencode($csrftoken);
    // Uncomment below line to display the link for next page
    // echo "<h2 style=\"text-align: center;\"><a href=\"/search.php?q=$query_encoded&bookmark=$bookmark_encoded&csrftoken=$csrftoken_encoded\">Next page</a></h2><br><br><br>";
}

echo json_encode($result);
?>