import { useState } from "react";
import { useQuery } from "@tanstack/react-query";
import { Link, useRoute } from "wouter";
import { ArrowLeft, Play, Clock, Youtube } from "lucide-react";
import Header from "@/components/header";
import Footer from "@/components/footer";
import { PageSideAds, TopBannerAd, MultiplexAd } from "@/components/adsense";
import { Skeleton } from "@/components/ui/skeleton";
import { format } from "date-fns";
import { de } from "date-fns/locale";
export interface YtVideo {
ytId: string;
slug: string;
title: string;
shortTitle: string;
rubrik: string;
publishedAt: string;
durationS: number;
teaser: string;
description: string;
descriptionClean?: string;
articleUrl?: string | null;
chapters: { t: string; label: string }[];
tags: string[];
previewUrl: string | null;
previewS: number;
embedUrl?: string;
posterUrl: string;
youtubeUrl: string;
}
export function chapSecs(t: string) {
const p = String(t).split(":").map((x) => parseInt(x, 10) || 0);
return p.length === 3 ? p[0] * 3600 + p[1] * 60 + p[2] : p[0] * 60 + p[1];
}
export function dauer(s: number) {
const m = Math.floor(s / 60);
const r = s % 60;
return `${m}:${String(r).padStart(2, "0")}`;
}
function RelatedCard({ v }: { v: YtVideo }) {
return (
{dauer(v.durationS)}
{v.shortTitle}
);
}
export default function VideoDetailPage() {
const [, params] = useRoute("/video/:slug");
// ?t= odpre predvajalnik na tem mestu; enak parameter uporablja
// tudi Clip oznacba, iz katere Google naredi "Wichtige Momente".
const [startAt, setStartAt] = useState(() => {
const n = parseInt(new URLSearchParams(window.location.search).get("t") || "", 10);
return Number.isFinite(n) && n > 0 ? n : 0;
});
const slug = params?.slug || "";
const { data, isLoading } = useQuery<{ item: YtVideo; related: YtVideo[] }>({
queryKey: [`/api/yt-videos/${slug}`],
enabled: !!slug,
});
const v = data?.item;
return (
{isLoading || !v ? (
) : (
<>
{/* Pravi YouTube predvajalnik: Google zahteva predvajljiv video na
strani, oglasi pa tecejo enako kot na youtube.com. Navadna
vdelava s klikom na play — brez samodejnega predvajanja, ker
YouTube v tem primeru oglasov ne servira. */}
{v.rubrik}{dauer(v.durationS)}{format(new Date(v.publishedAt), "d. MMMM yyyy", { locale: de })}