<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{.Query}} - Ocásek</title>
    <link rel="stylesheet" href="/static/css/style.css">
    <link rel="stylesheet" href="/static/css/{{.Theme}}.css">
    <link rel="search" type="application/opensearchdescription+xml" title="Ocásek" href="/opensearch.xml">
</head>
<body>
    <form action="/search" id="prev-next-form" class="results-search-container" method="GET" autocomplete="off">
        <h1 class="logomobile"><a class="no-decoration" href="./">Ocásek</a></h1>
        <div class="wrapper-results">
            <input type="text" name="q" value="{{ .Query }}" id="search-input" placeholder="Type to search..." />
            <button id="search-wrapper-ico" class="material-icons-round" name="t" value="image">search</button>
            <input type="submit" class="hide" name="t" value="image" />
        </div>
        <div class="sub-search-button-wrapper">
            <div class="search-container-results-btn">
                <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="text">search</button>
                <button name="t" value="text" class="clickable">Web</button>
            </div>
            <div class="search-container-results-btn">
                <button id="sub-search-wrapper-ico" class="material-icons-round clickable search-active" name="t" value="image">image</button>
                <button name="t" value="image" class="clickable search-active">Images</button>
            </div>
            <div class="search-container-results-btn">
                <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="video">movie</button>
                <button name="t" value="video" class="clickable">Videos</button>
            </div>
            <div class="search-container-results-btn">
                <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="forum">forum</button>
                <button name="t" value="forum" class="clickable">Forums</button>
            </div>
            <div id="content" class="js-enabled">
                <div class="search-container-results-btn">
                    <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="map">map</button>
                    <button name="t" value="map" class="clickable">Maps</button>
                </div>
            </div>
            <div class="search-container-results-btn">
                <button id="sub-search-wrapper-ico" class="material-icons-round clickable" name="t" value="file">share</button>
                <button name="t" value="file" class="clickable">Torrents</button>
            </div>
        </div>
    </form>
    <form class="results_settings" action="/search" method="get">
        <input type="hidden" name="q" value="{{ .Query }}">
        <select class="results-settings" name="safe" id="safeSearchSelect">
            <option value="disabled" {{if eq .Safe "disabled"}}selected{{end}}>Safe Search Off</option>
            <option value="active" {{if eq .Safe "active"}}selected{{end}}>Safe Search On</option>
        </select>
        <select class="results-settings" name="lang" id="languageSelect">
            {{range .LanguageOptions}}
            <option value="{{.Code}}" {{if eq .Code $.CurrentLang}}selected{{end}}>{{.Name}}</option>
            {{end}}
        </select>        
        <button class="results-save" name="t" value="image">Apply settings</button>
    </form>  
    <div class="search-results" id="results">
        <!-- Results go here -->
        {{ if .Results }}
            <div class="images images_viewer_hidden">
                <!-- Images Grid -->
                {{ range .Results }}
                    <div class="image">
                        <a class="clickable" href="{{ .ThumbProxy }}" target="_blank">
                            <img src="{{ .ThumbProxy }}" alt="{{ .Title }}" data-media="{{ .Media }}">
                            <div class="resolution">{{ .Width }} × {{ .Height }}</div>
                            <div class="details">
                                <div class="img_title">{{ .Title }}</div>
                                <div class="img_source"><a href="{{ .Source }}" target="_blank">Source</a></div>
                            </div>
                        </a>
                    </div>
                {{ end }}
            </div>
            <noscript>
                <div class="prev-next prev-img">
                    <form action="/search" method="get">
                        <input type="hidden" name="q" value="{{ .Query }}">
                        <input type="hidden" name="t" value="image">
                        {{ if .HasPrevPage }}
                        <!-- Subtract 1 from the current page for the Previous button -->
                        <button type="submit" name="p" value="{{ sub .Page 1 }}">Previous</button>
                        {{ end }}
                        {{ if .HasNextPage }}
                        <!-- Add 1 to the current page for the Next button -->
                        <button type="submit" name="p" value="{{ add .Page 1 }}">Next</button>
                        {{ end }}
                    </form>
                </div>
            </noscript>
        {{ else if .NoResults }}
            <div class="no-results">No results found for '{{ .Query }}'. Try different keywords.</div>
        {{ else }}
            <div class="no-more-results">Looks like this is the end of results.</div>
        {{ end }}
    </div>
    <div class="message-bottom-left" id="message-bottom-left">
        <span>Searching for new results...</span>
    </div>
    <script>
        // Check if JavaScript is enabled and modify the DOM accordingly
        document.getElementById('content').classList.remove('js-enabled');
    </script>
    <script>
        document.addEventListener("DOMContentLoaded", function() {
            let page = {{ .Page }};
            const query = "{{ .Query }}";
            let loading = false;
            let hasMoreResults = true;
            const loadingIndicator = document.getElementById('message-bottom-left');
            let loadingTimeout;

            function loadResults(newPage) {
                if (loading || !hasMoreResults) return;
                loading = true;

                // Show loading indicator if taking more than 100ms
                loadingTimeout = setTimeout(() => {
                    loadingIndicator.style.display = 'flex';
                }, 100);

                fetch(`/search?q=${encodeURIComponent(query)}&t=image&p=${newPage}`)
                    .then(response => {
                        if (!response.ok) {
                            throw new Error('Network response was not ok');
                        }
                        return response.text();
                    })
                    .then(data => {
                        clearTimeout(loadingTimeout);
                        loadingIndicator.style.display = 'none';
                        const parser = new DOMParser();
                        const doc = parser.parseFromString(data, 'text/html');
                        const newResults = doc.getElementById('results').innerHTML;
                        const noResultsMessage = "No results found for '{{ .Query }}'. Try different keywords.";
                        const endOfResultsMessage = "Looks like this is the end of results.";
                        const serverError = "Internal Server Error";

                        if (newResults.includes(noResultsMessage) || newResults.includes(endOfResultsMessage) || newResults.includes(serverError)) {
                            document.getElementById('results').innerHTML += newResults;
                            hasMoreResults = false;
                        } else {
                            document.getElementById('results').innerHTML += newResults;
                            page = newPage;
                        }
                        loading = false;
                    })
                    .catch(error => {
                        clearTimeout(loadingTimeout);
                        loadingIndicator.style.display = 'none';
                        console.error('Error loading results:', error);
                        hasMoreResults = false;  // Stop further attempts
                        loading = false;
                    });
            }

            window.addEventListener('scroll', () => {
                if (window.innerHeight + window.scrollY >= document.body.offsetHeight) {
                    loadResults(page + 1);
                }
            });
        });
    </script>
</body>
</html>