<script setup lang="ts">
import defaultImage from '@/assets/img/placeholder-loading.jpg';
import { computed, onMounted } from 'vue';
import Icon from "@/components/Icon.vue";

// Props with TypeScript interfaces
interface Props {
    sources: any[];
    thumbnail: string;
    data: Record<string, any>;
    gridItem?: boolean;
}

const props = defineProps<Props>();

// Computed properties
const domain = computed(() => {
    const newDomain = props.sources[0].domain.split('://')[1];
    return newDomain.replace('www.', '');
});

const categoryClass = computed(() => `result-card--${props.data.category}`);

// Methods
const loadImage = (url: string) => {
    return url ?? defaultImage;
};

</script>

<template>
    <div
        class="result-card"
        :class="categoryClass"
        :grid-item="gridItem"
    >
        <div class="result-card-thumbnail">
            <div
                ref="resultImageWrapper"
                class="result-image-wrapper"
                :style="{ '--blur-image-url': `url(${thumbnail}` }"
            >
                <img ref="resultImage" class="result-image" :src="loadImage(thumbnail)" />
            </div>
            <div class="domain">
                <img class="corner-top-left" src="@/assets/svg/corner.svg" />
                <img class="corner-bottom-right" src="@/assets/svg/corner.svg" />
                <div
                    class="domain-details"
                >
                    <icon class="category-icon" :name="`categories-${data.category}`" />
                    <p>{{ domain }}</p>
                </div>

            </div>
        </div>
        <div
            class="title-container">
            <p class="title">
                {{ sources[0].title }}
            </p>
        </div>
    </div>
</template>

<style scoped lang="scss">
@import "@/assets/colors";
@import "@/assets/mixins";

$footer-height: 16px;
$footer-gt: 8px; // col gap of footer
$footer-thumb-padding: 4px; //area between footer and image

.result-card {
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    gap: 4px;
    position: relative;
    cursor: pointer;
    border-radius: 10px;

    .category-icon {
        width: 16px;
        height: 16px;
    }

    &--people {
        .category-icon {
            fill: $people-900;
        }
    }

    &--places {
        .category-icon {
            fill: $places-900;
        }
    }

    &--duplicates {
        fill: $duplicates-900;
        .category-icon {
            fill: $duplicates-900;
        }
    }

    &--related {
        .category-icon {
            fill: $related-900;
        }
    }

    &--similar {
        .category-icon {
            fill: $similar-900;
        }
    }

    .source-link {
        @include regular-14-16;
        overflow: hidden;
        line-height: 18px;
        text-overflow: ellipsis;
        white-space: nowrap;
        color: $main-900;
        text-decoration: none;
    }

    > .result-card-thumbnail {
        border: 2px solid transparent;
        border-radius: 10px;

        height: 100%;

        &.locked {
            position: relative;

            > .overlay {
                display: block;
                z-index: 1;
                width: 100%;
                height: 100%;
                border-radius: 6px;
                position: absolute;
            }
        }


        >.new-count-thumbnail {
            position: absolute;
            right: 5px;
            bottom: 5px;
            z-index: 1;

        }
    }

    .source-link {
        @include regular-14-16;
        overflow: hidden;
        line-height: 18px;
        text-overflow: ellipsis;
        white-space: nowrap;
        color: $main-900;
        text-decoration: none;
    }

    > .title-container {
        display: flex;
        align-items: center;
        column-gap: 4px;
        max-width: 200px;

        &.locked {
            > .title {
                -webkit-filter: blur(2px);
                -moz-filter: blur(2px);
                -o-filter: blur(2px);
                -ms-filter: blur(2px);
                filter: blur(2px);
            }

            > .count {
                display: none;
            }
        }

        > .title {
            @include regular-14-16;
            overflow: hidden;
            text-overflow: ellipsis;
            white-space: nowrap;
            color: $main-900;
            line-height: 18px;
            //flex-grow: 1;
        }



    }

    //&[is-focused="true"] {
    //    > .result-card-thumbnail {
    //        border-color: $primary-300;
    //    }
    //
    //    .domain {
    //        &-details {
    //            padding-left: 4px;
    //            padding-bottom: 4px;
    //        }
    //    }
    //}

    &[grid-item="true"] {
        .result-image {
            //max-height: 256px;
            height: auto;
        }

        /*.image-fit-card {
            //max-height: fit-content;
            max-height: 100%;
            //height: 100%;
        }*/

        .result-image-wrapper {
            cursor: pointer;
        }


    }

    &-thumbnail {
        position: relative;

        .result-image {
            //width: 100%;
        }
    }

    &:hover {
        .result-image-wrapper {
            box-shadow: 0px 2px 8px 2px rgba(28, 30, 37, 0.2);
        }

        .domain {
            &-details {
                padding-left: 4px;
                padding-bottom: 4px;
            }
        }
    }

    .result-image {
        width: 100%;
        max-height: 230px;
        max-width: 256px;
        object-fit: contain;
        z-index: 10;
        overflow: hidden;
    }

    .result-image-wrapper {
        display: flex;
        align-items: center;
        background-repeat: no-repeat;
        border-radius: 8px 8px 8px 10px;
        overflow: hidden;
        transition: all 0.3s ease;
        backdrop-filter: blur(1px);
        -webkit-backdrop-filter: blur(1px);

        //max-height: 196px;
        height: 100%;

        align-items: center;
        justify-content: center;

        &:before {
            content: var(--blur-image-url, none);
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background-size: cover;
            background-position: center;
            background-image: var(--blur-image-url, none);
            filter: blur(20px);
        }
    }

    .result-image {
        //width: 100%;
    }
}

.debug-container {
    position: absolute;
    top: -30px;

    &-group {
        position: absolute;
        top: -36px;
        left: 4px;
    }
}

.domain {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    position: absolute;
    bottom: 0px;

    > .corner-bottom-right {
        position: absolute;
        bottom: 0px;
        right: -8px;
    }

    > .corner-top-left {
        position: absolute;
        top: -$footer-gt;
        left: -0;
    }

    &-details {
        display: flex;
        align-items: center;
        gap: 4px;
        padding: 4px 8px 0px 0px;
        backdrop-filter: blur(4px);
        background-color: $main-00;
        border-radius: 0px 8px 0px 8px;
        position: relative;
        transition: all .2s ease-in-out;

        &::after {
            content: "";
            position: absolute;
            top: 0px;
            left: 0px;
            background-image: url('@/assets/svg/corner.svg');
            background-repeat: no-repeat;
        }

        &::before {
            content: "";
            position: absolute;
            bottom: 0px;
            right: 0px;
            background-image: url('@/assets/svg/corner.svg');
            background-repeat: no-repeat;
        }

        > .domain-icon {
            width: 12px;
            height: 12px;
            border-radius: 50%;
            overflow: hidden;
        }

        p {
            $color: $main-1000;
            @include medium-12-12;
            max-width: 200px;
            cursor: pointer;
            line-height: 15px;
            white-space: nowrap;
            overflow: hidden;
            text-overflow: ellipsis;

            @media (max-width: $mobile-480-breakpoint) {
                max-width: 110px;
            }
        }
    }

    > button {
        position: absolute;
        top: -25px;
        left: $footer-thumb-padding;
    }
}

.debug-btn {
    @include button-debug();
}
</style>
