import { useState } from 'react' import { useParams } from 'react-router-dom' import { Star, ExternalLink, CheckCircle2, Heart } from 'lucide-react' import { cn } from '../lib/utils' // ── Mock hotel config (in real app — fetched by slug from API) ──────────────── interface HotelConfig { name: string color: string logoLetter: string redirectThreshold: number // min rating (1–5) to show redirect buttons platforms: { name: string; url: string }[] welcomeText: string showTextField: boolean } const MOCK_HOTELS: Record = { 'grand-palace': { name: 'Гранд Палас', color: '#2563eb', logoLetter: 'Г', redirectThreshold: 4, welcomeText: 'Как вам у нас?', showTextField: true, platforms: [ { name: 'Booking.com', url: 'https://www.booking.com/hotel/ru/' }, { name: 'Яндекс Путешествия', url: 'https://travel.yandex.ru/hotels/' }, { name: 'Google', url: 'https://g.page/r/' }, ], }, } const DEFAULT_CONFIG: HotelConfig = { name: 'Отель', color: '#2563eb', logoLetter: 'О', redirectThreshold: 4, welcomeText: 'Как вам у нас?', showTextField: true, platforms: [ { name: 'Booking.com', url: 'https://www.booking.com' }, { name: 'Google', url: 'https://google.com' }, ], } // ── Component ───────────────────────────────────────────────────────────────── export function GuestReviewPage() { const { slug } = useParams<{ slug: string }>() const hotel: HotelConfig = (slug ? MOCK_HOTELS[slug] : null) ?? DEFAULT_CONFIG const [rating, setRating] = useState(0) const [hover, setHover] = useState(0) const [text, setText] = useState('') const [submitted, setSubmitted] = useState(false) const isPositive = rating >= hotel.redirectThreshold const handleSubmit = () => { if (rating === 0) return setSubmitted(true) // In real app: POST /api/reviews { slug, rating, text } } return (
{/* Card */}
{/* Top color bar */}
{/* Logo */}
{hotel.logoLetter}
{/* Hotel name */}

{hotel.name}

{!submitted && (

{hotel.welcomeText}

)}
{/* ── NOT YET SUBMITTED ── */} {!submitted && ( <> {/* Stars */}
{Array.from({ length: 5 }, (_, i) => ( ))}
{/* Star label */} {(hover || rating) > 0 && (

{['', 'Очень плохо', 'Плохо', 'Нормально', 'Хорошо', 'Отлично!'][hover || rating]}

)} {/* Text field */} {rating > 0 && hotel.showTextField && (