import { fontTitles } from "@/app/fonts";
import BackButton from "@/components/BackButton";
import ImageGenerator from "@/components/ImageGenerator";
import Loading from "@/components/Loading";
import PhoneNumber from "@/components/PhoneNumber";
import { AspectRatio } from "@/components/ui/aspect-ratio";
import getIcon from "@/utils/getIcon";
import { getImageUrl } from "@/utils/getImage";
import { createClient } from '@/utils/supabase/client';
import { MapPin } from "lucide-react";
import Image from "next/image";

// ISR setup in Next.js 13 using `revalidate`
export const revalidate = 60;

async function getData(id: string) {
    const supabase = createClient();

    const { data } = await supabase.from('extravios').select().match({ id }).single();

    if (!data) {
        return null;
    }

    const imageSrc = data?.images?.length ? await getImageUrl(data?.images[0]?.path) : '';

    return {
        data,
        imageSrc,
    };
}

export default async function Page({ params: { id } }: { params: { id: string } }) {
    const result = await getData(id);

    if (!result) {
        return <Loading small />;
    }

    const { data, imageSrc } = result;

    return (
        <div className="mt-24 flex flex-col gap-8 justify-center items-center p-4 w-full md:max-w-[720px]">
            {data?.images?.length > 0 ?
                <AspectRatio ratio={16 / 9} className="bg-muted">
                    <Image
                        src={imageSrc}
                        alt={`Extravío ${data.title}`}
                        fill
                        sizes="20x20"
                        priority
                        className="rounded-md object-cover"
                        quality="90"
                        placeholder="blur"
                        blurDataURL="L-N0eM-Vou?X~VxWs+xY%3RiRjjc"
                    />
                </AspectRatio>
                : null}

            <div className="min-h-[250px] flex flex-col w-full gap-6 mb-2" key={data.id}>
                {getIcon(data.lost_type_id)}

                <h3 className={`${fontTitles.className} text-2xl font-semibold mb-4`}>{data.title}</h3>
                <p className="text-muted-foreground text-xl mb-2">
                    {data.description}
                </p>
                {data.street_name ?
                    <div className="flex gap-1 text-muted-foreground text-base">
                        <MapPin /> <a href={`https://www.google.com/maps/search/?api=1&query=${data.street_name}+${data.street_number}, Pergamino, Buenos Aires`} target="_blank" rel="noreferrer" className="underline text-blue-600">{data.street_name} {data.street_number}</a>
                    </div>
                    : null}
                <PhoneNumber phone_number={data.phone_number} hasWhatsApp={data.whatsApp} title={data.title} />
            </div>

            <div className="w-full flex flex-col gap-12 md:gap-16 justify-between mt-4 px-4 items-center">
                <ImageGenerator textToShare={`${data.title}\n\n\n${data.description}\n\n\n\n\n\n${data.phone_number ? 'WhatsApp' : 'Teléfono'}: ${data.phone_number}`} image={data?.images?.length > 0 ? data?.images[0]?.path : ''} />
                <BackButton className="w-full">Volver</BackButton>
            </div>
        </div>
    );
}