<?php require "misc/header.php"; ?>
<title>
<?php
$query = htmlspecialchars(trim($_REQUEST["q"]));
echo $query;
?> - Binternet</title>
</head>
    <body>
        <form class="search-container" method="get" autocomplete="off">
            <h1><a class="no-decoration accent" href="./">Binternet</a></h1>
            <input type="text" name="q" placeholder="Search Image"
                <?php
                $query_encoded = urlencode($query);

                if (1 > strlen($query) || strlen($query) > 64) {
                    header("Location: ./");
                    die();
                }

                echo "value=\"$query\"";
                ?>
            >
            <!-- <div></div> -->
        </form>

<?php
$query = $_GET["q"];

$bookmark = null;
if (array_key_exists("bookmark", $_GET)) {
    $bookmark = urldecode($_GET["bookmark"]);
}

$csrftoken = null;
if (array_key_exists("csrftoken", $_GET)) {
    $csrftoken = $_GET["csrftoken"];
}

$url = "https://www.pinterest.com/resource/BaseSearchResource/get/";

class SearchResult
{
    public $images;
    public $bookmark;
}

$header_function = function ($ch, $rawheader) {
    global $csrftoken;
    $len = strlen($rawheader);

    $header = explode(":", $rawheader, 2);
    if (count($header) != 2) {
        return $len;
    }

    // we are only interested in set-cookie header
    if (trim($header[0]) != "set-cookie") {
        return $len;
    }

    $cookie = explode(";", trim($header[1]), 2);
    $cookie = explode("=", $cookie[0], 2);

    switch ($cookie[0]) {
        case "csrftoken":
            $csrftoken = $cookie[1];
    }

    return $len;
};

$prepare_search_curl_obj = function ($query, $bookmark) use (
    $url,
    $header_function,
    $csrftoken
) {
    $data_param_obj = [
        "options" => [
            "query" => $query,
        ],
    ];
    if ($bookmark != null) {
        $data_param_obj["options"]["bookmarks"] = [$bookmark];
    }

    $data_param = urlencode(json_encode($data_param_obj));

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

    $finalurl = $url;
    if ($bookmark == null) {
        $finalurl = "$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 != null) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, "data=$data_param");
    }
    return $ch;
};

$search = function ($query, $bookmark) use ($prepare_search_curl_obj) {
    $ch = $prepare_search_curl_obj($query, $bookmark);
    $response = curl_exec($ch);
    $data = json_decode($response);
    $images = [];
    echo "<div class=img-container>";
    if (
        $data &&
        property_exists($data, "resource_response") &&
        property_exists($data->{"resource_response"}, "data") &&
        property_exists($data->{"resource_response"}->{"data"}, "results")
    ) {
        foreach (
            $data->{"resource_response"}->{"data"}->{"results"}
            as $result
        ) {
            $image = $result->{"images"}->{"orig"};
            $url = $image->{"url"};
            array_push($images, $url);
            echo "<a class=img-result href='/image_proxy.php?url=", $url, "'>";
            echo "<img loading='lazy' src='/image_proxy.php?url=",
                $url,
                "'></a>";
        }
    } else {
        echo "<p>No results found.</p>";
    }
    echo "</div>";
    $result = new SearchResult();
    $result->images = $images;
    if (
        $data &&
        property_exists($data, "resource_response") &&
        property_exists($data->{"resource_response"}, "bookmark")
    ) {
        $result->bookmark = $data->{"resource_response"}->{"bookmark"};
    }
    return $result;
};

$result = $search($query, $bookmark);

if ($result->bookmark != null) {
    $query_encoded = urlencode($query);
    $bookmark_encoded = urlencode($result->bookmark);
    $csrftoken_encoded = $csrftoken ? urlencode($csrftoken) : "";

    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>";
}

include "misc/footer.php";


?>