'use client'; import { Building2, Calendar, Download, Factory, FileText, Globe, MapPin, Ruler, Users, Zap, } from 'lucide-react'; import * as React from 'react'; import { ParkMap } from '@/components/khu-cong-nghiep/park-map'; import { Badge } from '@/components/ui/badge'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { type IndustrialParkDetail, type IndustrialParkListItem, PARK_STATUS_COLORS, PARK_STATUS_LABELS, REGION_LABELS, } from '@/lib/khu-cong-nghiep-api'; import { cn } from '@/lib/utils'; type Tab = 'infrastructure' | 'connectivity' | 'incentives' | 'tenants' | 'documents'; const TABS: { key: Tab; label: string }[] = [ { key: 'infrastructure', label: 'Hạ tầng' }, { key: 'connectivity', label: 'Kết nối giao thông' }, { key: 'incentives', label: 'Ưu đãi đầu tư' }, { key: 'tenants', label: 'Doanh nghiệp' }, { key: 'documents', label: 'Tài liệu' }, ]; interface KhuCongNghiepDetailClientProps { park: IndustrialParkDetail; } /** * The list-page ParkMap takes `IndustrialParkListItem[]`. Detail has the * same fields plus a few extras — pick the subset the map actually uses * so we can render a single-park view from the detail data. */ function parkAsListItem(p: IndustrialParkDetail): IndustrialParkListItem { return { id: p.id, name: p.name, nameEn: p.nameEn, slug: p.slug, developer: p.developer, status: p.status, province: p.province, region: p.region, totalAreaHa: p.totalAreaHa, occupancyRate: p.occupancyRate, remainingAreaHa: p.remainingAreaHa, tenantCount: p.tenantCount, landRentUsdM2Year: p.landRentUsdM2Year, rbfRentUsdM2Month: p.rbfRentUsdM2Month, rbwRentUsdM2Month: p.rbwRentUsdM2Month, targetIndustries: p.targetIndustries, latitude: p.latitude, longitude: p.longitude, }; } export function KhuCongNghiepDetailClient({ park }: KhuCongNghiepDetailClientProps) { const [activeTab, setActiveTab] = React.useState('infrastructure'); const occupancyColor = park.occupancyRate >= 90 ? 'text-red-600' : park.occupancyRate >= 70 ? 'text-amber-600' : 'text-green-600'; return (
{/* Header */}
{PARK_STATUS_LABELS[park.status]} {REGION_LABELS[park.region]} {park.isVerified && ( Đã xác minh )}

{park.name}

{park.nameEn && (

{park.nameEn}

)}
{park.address}, {park.district}, {park.province} {park.developer} {park.establishedYear && ( Thành lập: {park.establishedYear} )}
{/* Quick stats */}
} label="Tổng diện tích" value={`${park.totalAreaHa.toLocaleString()} ha`} /> } label="DT cho thuê" value={`${park.leasableAreaHa.toLocaleString()} ha`} /> } label="Doanh nghiệp" value={`${park.tenantCount}`} />
{/* Main content */}
{/* Description */} {park.description && ( Giới thiệu

{park.description}

)} {/* Vị trí trên bản đồ */} Vị trí trên bản đồ

{park.address}, {park.district}, {park.province}

{/* Target industries */} {park.targetIndustries.length > 0 && ( Ngành nghề thu hút
{park.targetIndustries.map((industry) => ( {industry} ))}
)} {/* Certifications */} {park.certifications && park.certifications.length > 0 && ( Chứng nhận
{park.certifications.map((cert) => ( {cert} ))}
)} {/* Tabs */}
{TABS.map((tab) => ( ))}
{activeTab === 'infrastructure' && } {activeTab === 'connectivity' && } {activeTab === 'incentives' && } {activeTab === 'tenants' && } {activeTab === 'documents' && }
{/* Sidebar */}
{/* Rent info */} Giá thuê {park.landRentUsdM2Year != null ? (
Thuê đất ${park.landRentUsdM2Year}/m²/năm
) : null} {park.rbfRentUsdM2Month != null ? (
Nhà xưởng xây sẵn ${park.rbfRentUsdM2Month}/m²/tháng
) : null} {park.rbwRentUsdM2Month != null ? (
Nhà kho ${park.rbwRentUsdM2Month}/m²/tháng
) : null} {park.managementFeeUsd != null ? (
Phí quản lý ${park.managementFeeUsd}/m²/năm
) : null} {park.landRentUsdM2Year == null && park.rbfRentUsdM2Month == null && park.rbwRentUsdM2Month == null && (

Liên hệ để biết giá thuê

)}
{/* Developer / Operator */} Thông tin quản lý

Chủ đầu tư

{park.developer}

{park.operator && (

Đơn vị vận hành

{park.operator}

)}
); } // ─── Sub-components ──────────────────────────────────────── function QuickStat({ icon, label, value, valueClassName, }: { icon?: React.ReactNode; label: string; value: string; valueClassName?: string; }) { return (
{icon &&
{icon}
}

{label}

{value}

); } function InfrastructureTab({ park }: { park: IndustrialParkDetail }) { if (!park.infrastructure || Object.keys(park.infrastructure).length === 0) { return

Chưa cập nhật thông tin hạ tầng.

; } return (
{Object.entries(park.infrastructure).map(([key, value]) => (

{key.replace(/_/g, ' ')}

{value}

))}
); } function ConnectivityTab({ park }: { park: IndustrialParkDetail }) { if (!park.connectivity || Object.keys(park.connectivity).length === 0) { return

Chưa cập nhật thông tin kết nối giao thông.

; } return (
{Object.entries(park.connectivity).map(([key, info]) => (

{key.replace(/_/g, ' ')}

{info.name}

{info.distanceKm} km
))}
); } function IncentivesTab({ park }: { park: IndustrialParkDetail }) { if (!park.incentives || Object.keys(park.incentives).length === 0) { return

Chưa cập nhật thông tin ưu đãi.

; } return (
{Object.entries(park.incentives).map(([key, value]) => (

{key.replace(/_/g, ' ')}

{typeof value === 'string' ? value : JSON.stringify(value)}

))}
); } function TenantsTab({ park }: { park: IndustrialParkDetail }) { if (!park.existingTenants || park.existingTenants.length === 0) { return

Chưa cập nhật danh sách doanh nghiệp.

; } return (
{park.existingTenants.map((tenant) => ( ))}
Doanh nghiệp Quốc gia Ngành nghề
{tenant.name} {tenant.country} {tenant.industry}
); } function DocumentsTab({ park }: { park: IndustrialParkDetail }) { if (!park.documents || park.documents.length === 0) { return

Chưa có tài liệu nào.

; } return (
{park.documents.map((doc) => (

{doc.name}

))}
); }