"use client";
import { motion, AnimatePresence } from "framer-motion";
import { useRef, useState, useEffect } from "react";
import type { DemoData } from "@/data/demos";
const fadeUp = {
hidden: { opacity: 0, y: 40 },
show: { opacity: 1, y: 0, transition: { duration: 0.7, ease: [0.25, 0.46, 0.45, 0.94] as [number, number, number, number] } },
};
const stagger = {
hidden: {},
show: { transition: { staggerChildren: 0.1 } },
};
const translations = {
tr: {
navReserve: "Rezervasyon",
navHours: "Çalışma Saatleri",
navCurator: "Kokteyl Menüsü",
navReviews: "Değerlendirmeler",
bookTable: "Masa Ayırt",
exclusiveLounge: "ÖZEL KOKTEYL SALONU",
cocktailStage: "KOKTEYL SAHNESİ",
evenings: "geceleri",
heroDesc: "Noir Velvet Lounge'a adım atın. Klasik karışımlar, botanik aromalar ve yıllanmış özel içkilerin loş kehribar akustiği altındaki benzersiz sunumunu keşfedin.",
discoverMenu: "MENÜYÜ KEŞFET",
reserveTableTitle: "Stage Booking",
reserveTableHeader: "MASA AYIRTIN",
reserveTableDesc: "Ana sahne akustik çizgilerinin altında, size özel bar tezgahı veya lounge masanızı şimdiden ayırtın.",
fieldsName: "İsim Soyisim",
fieldsPhone: "İletişim Numarası",
fieldsDate: "Tarih",
fieldsTime: "Saat",
guarantee: "Bu formu doldurarak doğrulanmış bir rezervasyon sağlarsınız. Masalar, rezervasyon saatinden itibaren 15 dakika boyunca adınıza tutulur.",
secureRes: "REZERVASYON YAP",
curatorSpecials: "Küratörün Seçtikleri",
weRecommend: "TAVSİYE EDİLENLER",
signature: "İmza",
loungeStories: "LOUNGE HİKAYELERİ",
loungeStoriesDesc: "Seçkin miksolojistlerin ve caz akustiği kuratörlerinin salon hakkındaki yorumlarını keşfedin.",
loungeHours: "ÇALIŞMA SAATLERİ",
loungeDials: "İMZA KOKTEYLLER",
privacyRegs: "Gizlilik Sözleşmesi",
termsStay: "Salon Koşulları",
dismiss: "KAPAT",
enquiryActive: "REZERVASYON YAPILDI",
ambassadorActive: "Sahne Mihmandarı Aktif",
enquirySuccess: "Bar tezgahı veya lounge masası rezervasyonunuzu başarıyla kaydettik. Özel mihmandarımız giriş koordinatlarınızı doğrulamak için sizinle iletişime geçecektir. Teşekkürler!",
},
en: {
navReserve: "Reserve Table",
navHours: "Hours",
navCurator: "Curator's Specials",
navReviews: "Reviews",
bookTable: "Book a table",
exclusiveLounge: "EXCLUSIVE LOUNGE SERVICE",
cocktailStage: "COCKTAIL STAGE",
evenings: "evenings",
heroDesc: "Step into Noir Velvet Lounge. Indulge in classic mixes, botanic blends, and aged private reserve spirits staged under moody amber acoustics.",
discoverMenu: "DISCOVER STAGE MENU",
reserveTableTitle: "Stage Booking",
reserveTableHeader: "RESERVE A TABLE",
reserveTableDesc: "Allocate your private counter or lounge table under the main stage acoustic lines.",
fieldsName: "Name",
fieldsPhone: "Phone",
fieldsDate: "Date",
fieldsTime: "Time",
guarantee: "By submitting this form, you secure a verified reservation. Tables are held for 15 minutes past the booking coordinates.",
secureRes: "SECURE RESERVATION",
curatorSpecials: "Curator's Specials",
weRecommend: "WE RECOMMEND",
signature: "Signature",
loungeStories: "LOUNGE STORIES",
loungeStoriesDesc: "Hear what prominent mixologists and jazz acoustic curators write about the lounge.",
loungeHours: "OPEN HOURS",
loungeDials: "SPECIAL DIALS",
privacyRegs: "Privacy Regulations",
termsStay: "Terms of Lounge",
dismiss: "DISMISS",
enquiryActive: "TABLE RESERVED",
ambassadorActive: "Stage Concierge Active",
enquirySuccess: "We have secured your counter or lounge table reservation. A private host has registered your parameters. Thank you!",
}
};
export default function BarTemplate({ data }: { data: DemoData }) {
const { firma, istatistikler = [], hizmetler = [], yorumlar = [] } = data;
const [showBookingModal, setShowBookingModal] = useState(false);
const [menuOpen, setMenuOpen] = useState(false);
const [lang, setLang] = useState<"tr" | "en">("tr");
const [preloader, setPreloader] = useState(true);
const t = translations[lang];
// 1. Lenis Smooth Scroll Integration
useEffect(() => {
let lenis: any;
import("@studio-freight/lenis").then(({ default: Lenis }) => {
lenis = new Lenis({ duration: 1.2, easing: (t: number) => Math.min(1, 1.001 - Math.pow(2, -10 * t)) });
function raf(time: number) { lenis.raf(time); requestAnimationFrame(raf); }
requestAnimationFrame(raf);
});
return () => lenis?.destroy();
}, []);
// 2. Preloader Curtain Timer
useEffect(() => {
const timer = setTimeout(() => {
setPreloader(false);
}, 1500);
return () => clearTimeout(timer);
}, []);
// Localized statistics/hours
const getLocalizedStat = (deger: string, etiket: string) => {
if (deger.toLowerCase().includes("weekdays") || etiket.toLowerCase().includes("weekdays") || etiket.toLowerCase().includes("pazartesi")) {
return {
deger: lang === "tr" ? "Hafta İçi" : "Weekdays",
etiket: lang === "tr" ? "Pazartesi - Cuma · 16:00 - 02:00" : "Monday - Friday · 4:00 PM - 2:00 AM"
};
}
if (deger.toLowerCase().includes("weekends") || etiket.toLowerCase().includes("weekends") || etiket.toLowerCase().includes("cumartesi")) {
return {
deger: lang === "tr" ? "Hafta Sonu" : "Weekends",
etiket: lang === "tr" ? "Cumartesi - Pazar · 16:00 - 04:00" : "Saturday - Sunday · 4:00 PM - 4:00 AM"
};
}
if (deger.toLowerCase().includes("happy") || etiket.toLowerCase().includes("happy")) {
return {
deger: lang === "tr" ? "Happy Hour" : "Happy Hour",
etiket: lang === "tr" ? "Her gün 17:00 - 19:00 arası imza kokteyllerde %20 indirim" : "Daily 5:00 PM - 7:00 PM · 20% off signature mixology"
};
}
return {
deger: lang === "tr" ? "Özel Karışımlar" : deger,
etiket: lang === "tr" ? "Taze botanik şuruplar ve el yapımı bitters infüzyonları." : etiket
};
};
// Localized services/beverages
const getLocalizedService = (baslik: string, aciklama: string) => {
if (baslik.toLowerCase().includes("velvet") || baslik.toLowerCase().includes("velvet kiss")) {
return {
title: lang === "tr" ? "VELVET KISS KOKTEYLİ" : "VELVET KISS COCKTAIL",
desc: lang === "tr" ? "Kendi yapımımız taze vişne likörü, vanilya şurubu ve dumanlanmış ardıç aromaları ile hazırlanan imza içkimiz." : aciklama
};
}
if (baslik.toLowerCase().includes("amber") || baslik.toLowerCase().includes("amber smoke") || baslik.toLowerCase().includes("smoke")) {
return {
title: lang === "tr" ? "KEHRİBAR DUMANI" : "AMBER SMOKE",
desc: lang === "tr" ? "Ağaç talaşı isi ile tütsülenmiş viski, botanik acı otlar ve karamelize portakal dilimi." : aciklama
};
}
return {
title: lang === "tr" ? "BOTANİK RÜYA" : "BOTANICAL DREAM",
desc: lang === "tr" ? "Taze biberiye infüzyonu, narenciye asidi ve organik zencefil gazozu ile canlandırıcı hafif bir karışım." : aciklama
};
};
// Custom visual styles & Google Fonts for our Classic Noir Velvet aesthetic
const css = `
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;0,700;1,400&family=Space+Grotesk:wght@300;400;500;600;700&display=swap');
:root {
--color-velvet-gold: #D4AF37;
--color-velvet-black: #09090C;
--color-velvet-card: #14141A;
--color-text-white: #E8E8E8;
--color-text-muted: rgba(232, 232, 232, 0.6);
}
.font-serif-editorial {
font-family: 'Cormorant Garamond', Georgia, serif;
}
.font-serif-lux {
font-family: 'Cormorant Garamond', Georgia, serif;
font-weight: 700;
}
.font-sans-clean {
font-family: 'Space Grotesk', sans-serif;
}
.bg-mesh-velvet {
background-image:
radial-gradient(circle at 5% 5%, rgba(212, 175, 55, 0.03) 0%, transparent 40%),
radial-gradient(circle at 95% 95%, rgba(212, 175, 55, 0.02) 0%, transparent 50%);
}
.gold-glow {
box-shadow: 0 0 20px rgba(212, 175, 55, 0.15);
}
/* Slow pulse for active indicators */
.pulse-gold {
animation: goldPulse 2.5s infinite;
}
@keyframes goldPulse {
0% { box-shadow: 0 0 0 0 rgba(212, 175, 55, 0.4); }
70% { box-shadow: 0 0 0 10px rgba(212, 175, 55, 0); }
100% { box-shadow: 0 0 0 0 rgba(212, 175, 55, 0); }
}
.hero-title-clamp {
font-size: clamp(48px, 8vw, 110px);
letter-spacing: -0.03em;
line-height: 0.9;
}
`;
return (
<>
{/* ── IMZA AN: CURTAIN REVEAL PRELOADER ── */}
{locStat.etiket}
{/* Overlay velvet glow */}
{t.reserveTableDesc}
{t.guarantee}
{t.loungeStoriesDesc}
“{y.yorum}”
{t.ambassadorActive}
{t.enquirySuccess}