import { useState, useEffect } from "react"; import { useQuery } from "@tanstack/react-query"; import { useRoute, useLocation } from "wouter"; import { type Video } from "@shared/schema"; import go4LogoPath from "@assets/go4_1756394900352.png"; // Helper functions const formatViews = (views: number): string => { if (views >= 1000000) return `${(views / 1000000).toFixed(1)}M`; if (views >= 1000) return `${(views / 1000).toFixed(1)}K`; return views.toString(); }; const formatDuration = (seconds: number): string => { const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = seconds % 60; if (hours > 0) { return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; } return `${minutes}:${secs.toString().padStart(2, '0')}`; }; const formatDate = (date: Date | string): string => { const d = typeof date === 'string' ? new Date(date) : date; return d.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); }; import { Button } from "@/components/ui/button"; import { Share2, X, Edit3, Menu, Search, ChevronLeft, ChevronRight } from "lucide-react"; import { Input } from "@/components/ui/input"; import { Link } from "wouter"; import { apiRequest } from "@/lib/queryClient"; import { FacebookShareButton, TwitterShareButton, WhatsappShareButton, FacebookIcon, TwitterIcon, WhatsappIcon, } from "react-share"; import AdSenseAd from "@/components/adsense-ad"; import HeaderAd from "@/components/HeaderAd"; interface VideosResponse { videos: Video[]; total: number; hasMore: boolean; } export default function VideoPage() { const [, params] = useRoute("/video/:id"); const [, setLocation] = useLocation(); const videoId = params?.id; // Get URL search params to determine show context const urlParams = new URLSearchParams(window.location.search); const showContext = urlParams.get('show'); const [showShareMenu, setShowShareMenu] = useState(false); const [touchStart, setTouchStart] = useState(0); const [touchEnd, setTouchEnd] = useState(0); const [activeDot, setActiveDot] = useState<'left' | 'center' | 'right'>('center'); const [searchQuery, setSearchQuery] = useState(""); const [viewMode, setViewMode] = useState<"grid" | "list">("grid"); const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); // Fetch current video const { data: currentVideo, isLoading: videoLoading, error: videoError } = useQuery