{% set searchQuery = craft.app.request.getParam('query') %}
{% set searchPage = craft.app.request.getParam('page') ?? 1 %}
{% set sortQuery = craft.app.request.getParam('sort') %}
{% set regionQuery = craft.app.request.getParam('region') %}
{% set searchFilter = craft.app.request.getParam('filter') %}
{% set bedroomsQuery = craft.app.request.getParam('bedrooms') %}
{% set bathroomsQuery = craft.app.request.getParam('bathrooms') %}
{% set carsQuery = craft.app.request.getParam('cars') %}
{% set homesQuery = craft.app.request.getParam('homes') %}
{% set hasResults = false %}
{% set hasFiltersApplied = false %}
{% set numFiltersApplied = 0 %}
{% set numShownPosts = 6 %}

{% set unfilteredResults = craft.entries()
    .section([
        'homes'
    ])
    .all()
%}

{# Initial homes model #}
{% set homes = craft.entries().section(['homes']) %}
{% set searchParam = [] %}
{% set queryParam = [] %}

{# Compose searchQuery parameter #}
{% if searchQuery | length %}
    {% set searchParam = searchParam | merge([searchQuery]) %}
    {% set hasResults = true %}
{% endif %}

{# Sorting Functionality #}
{% switch sortQuery %}
    {% case "Most recent" %}
        {% set order = 'postDate DESC' %}
    {% case "A-Z" %}
        {% set order = 'title ASC' %}
    {% case "Z-A" %}
        {% set order = 'title DESC' %}
    {% default %}
        {% set order = 'postDate DESC' %}
{% endswitch %}

{# Compose regionQuery parameter #}
{% if regionQuery | length and not ( regionQuery == 'All' or regionQuery == 'all' ) %}
    {% set searchParam = searchParam | merge(['homeAddress:' ~ regionQuery]) %}
    {% set hasFiltersApplied = true %}
    {% set numFiltersApplied = numFiltersApplied + 1 %}
{% endif %}

{# Compose bedroomsQuery parameter #}
{% if bedroomsQuery | length and bedroomsQuery != 'min-max' %}
    {% set bedroomsLower = bedroomsQuery | split('-', 2)[0] %}
    {% set bedroomsLower = bedroomsLower == 'min' ? 0 : bedroomsLower %}
    {% set bedroomsUpper = bedroomsQuery | split('-', 2)[1] ?? bedroomsLower %}
    {% set bedroomsUpper = bedroomsUpper == 'max' ? 9999 : bedroomsUpper %}
    {% set numFiltersApplied = numFiltersApplied + 1 %}
{% endif %}

{# Compose bathroomsQuery parameter #}
{% if bathroomsQuery | length and bathroomsQuery != 'min-max' %}
    {% set bathroomsLower = bathroomsQuery | split('-', 2)[0] %}
    {% set bathroomsLower = bathroomsLower == 'min' ? 0 : bathroomsLower %}
    {% set bathroomsUpper = bathroomsQuery | split('-', 2)[1] ?? bathroomsLower %}
    {% set bathroomsUpper = bathroomsUpper == 'max' ? 9999 : bathroomsUpper %}
    {% set numFiltersApplied = numFiltersApplied + 1 %}
{% endif %}

{# Compose carsQuery parameter #}
{% if carsQuery | length and carsQuery != 'min-max' %}
    {% set carsLower = carsQuery | split('-', 2)[0] %}
    {% set carsLower = carsLower == 'min' ? 0 : carsLower %}
    {% set carsUpper = carsQuery | split('-', 2)[1] ?? carsLower %}
    {% set carsUpper = carsUpper == 'max' ? 9999 : carsUpper %}
    {% set numFiltersApplied = numFiltersApplied + 1 %}
{% endif %}

{# Compose homesQuery parameter #}
{% if homesQuery | length and homesQuery != 'min-max' %}
    {% set homesLower = homesQuery | split('-', 2)[0] %}
    {% set homesLower = homesLower == 'min' ? 0 : homesLower %}
    {% set homesUpper = homesQuery | split('-', 2)[1] ?? homesLower %}
    {% set homesUpper = homesUpper == 'max' ? 9999 : homesUpper %}
    {% set numFiltersApplied = numFiltersApplied + 1 %}
{% endif %}

{# Compose searchFilter parameter #}
{% if searchFilter | length %}
    {% set categories = craft.categories()
        .group('homeCategories')
        .title(searchFilter)
        .all()
    %}
{% endif %}

{% set totalResults = homes
    .relatedTo(categories ?? '')
    .search(searchParam ? searchParam | join(' ') : '')
    .orderBy(order)
    .all() %}

{# Filter based off of queries #}
{% set filteredResults = [] %}
{% set hasFilteredResults = false %}
{% if bedroomsQuery | length or bathroomsQuery | length or carsQuery | length or homesQuery | length %}
    {% set hasFilteredResults = true %}
{% endif %}

{% for home in totalResults %}
    {% set specs = home.homeSpecifications.one() %}
    {% set matchBedrooms = true %}
    {% set matchBathrooms = true %}
    {% set matchCars = true %}
    {% set matchHomes = true %}

    {# Check bedrooms #}
    {% if bedroomsQuery | length and specs and specs.beds | length %}
        {% if not( specs.beds >= bedroomsLower and specs.beds <= bedroomsUpper ) %}
            {% set matchBedrooms = false %}
        {% endif %}
    {% endif %}

    {# Check bathrooms #}
    {% if bathroomsQuery | length and specs and specs.baths | length %}
        {% if not( specs.baths >= bathroomsLower and specs.baths <= bathroomsUpper ) %}
            {% set matchBathrooms = false %}
        {% endif %}
    {% endif %}

    {# Check cars #}
    {% if carsQuery | length and specs and specs.parking | length %}
        {% if not( specs.parking >= carsLower and specs.parking <= carsUpper ) %}
            {% set matchCars = false %}
        {% endif %}
    {% endif %}

    {# Check homes #}
    {% if homesQuery | length and specs and specs.homes | length %}
        {% if not( specs.homes >= homesLower and specs.homes <= homesUpper ) %}
            {% set matchHomes = false %}
        {% endif %}
    {% endif %}

    {% if hasFilteredResults %}
        {% if matchBedrooms and matchBathrooms and matchCars and matchHomes %}
            {% set filteredResults = filteredResults | merge([home]) %}
        {% endif %}
    {% endif %}
{% endfor %}

{# Gather final results #}
{% set finalResults = [] %}
{% if filteredResults | length or hasFilteredResults %}
    {% set finalResults = filteredResults %}
    {% set hasFiltersApplied = true %}
{% else %}
    {% set finalResults = totalResults %}
{% endif %}

{% set pageResults = finalResults | slice((searchPage - 1) * numShownPosts, numShownPosts) %}

<section class="explore-homes-results-panel w-full relative bg-white-primary">
    <div class="container-wrapper sm:max-w-7xl sm:mx-auto">
        <div class="padding-wrapper sm:px-8 lg:px-10 sm:pb-10 sm:pt-8 lg:pb-12 lg:pt-10 xl:pb-16 xl:pt-12">
            <div class="content-wrapper w-full flex flex-col justify-center items-center">
                {% if hasResults or not pageResults | length >= 1 %}
                    {% include themeDir ~ '/_includes/_blocks/_explore-homes/_explore-homes-title.twig' %}
                {% endif %}
                {% if hasResults or not searchQuery | length %}
                    {% include themeDir ~ '/_includes/_blocks/_explore-homes/_explore-homes-filters.twig' %}
                {% endif %}
                {% if pageResults | length >= 1 %}
                    {% include themeDir ~ '/_includes/_blocks/_explore-homes/_explore-homes-results.twig' %}
                {% endif %}
                {% if ( hasResults and finalResults | length > numShownPosts ) or ( not searchQuery | length and finalResults | length > numShownPosts ) %}
                    {% include themeDir ~ '/_includes/_blocks/_explore-homes/_explore-homes-pagination.twig' %}
                    {% include themeDir ~ '/_includes/_blocks/_explore-homes/_explore-homes-number-homes.twig' %}
                {% endif %}
            </div>
        </div>
    </div>
</section>