"use client"; import { useCallback, useEffect, useState } from "react"; import { useParams, useRouter } from "next/navigation"; import { Spinner } from "@/Components/UI"; import { TripFormModal } from "@/Components/Trip/Tripformmodal"; import { TripDeleteModal } from "@/Components/Trip/Tripdeletemodal"; import { TripReportPanel } from "@/Components/Trip_Report/Tripreportpanel"; import { tripService } from "@/services/trip.service"; import { getStoredToken } from "@/lib/auth"; import type { Trip, CreateTripPayload, UpdateTripPayload, } from "@/types/trip"; import { TRIP_STATUS_MAP } from "@/types/trip"; // ── Helpers ─────────────────────────────────────────────────────────────────── function fmtDate(iso?: string | null): string { if (!iso) return "—"; return new Date(iso).toLocaleDateString("ar-SA", { year: "numeric", month: "long", day: "numeric", hour: "2-digit", minute: "2-digit", }); } function fmtNumber(n?: number | string | null): string { if (n == null || n === "") return "—"; return Number(n).toLocaleString("ar-SA"); } // ── Sub-components ──────────────────────────────────────────────────────────── function SectionCard({ title, children }: { title: string; children: React.ReactNode }) { return (

{title}

{children}
); } function DetailRow({ label, value, mono = false, }: { label: string; value: string; mono?: boolean; }) { return (
{label} {value}
); } // ── Stat card (للأعداد) ─────────────────────────────────────────────────────── function StatCard({ label, value, color = "var(--color-brand-600)", bg = "var(--color-brand-50, #EFF6FF)", }: { label: string; value: string; color?: string; bg?: string; }) { return (
{label} {value}
); } // ── Page ────────────────────────────────────────────────────────────────────── export default function TripDetailPage() { const params = useParams(); const router = useRouter(); const tripId = params?.tripId as string; const [trip, setTrip] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); // ── Modal state ─────────────────────────────────────────────────────────── const [editOpen, setEditOpen] = useState(false); const [deleteOpen, setDeleteOpen] = useState(false); const [deleting, setDeleting] = useState(false); // ── Load trip ───────────────────────────────────────────────────────────── const loadTrip = useCallback(async () => { if (!tripId) return; setLoading(true); setError(null); try { const token = getStoredToken(); const res = await tripService.getById(tripId, token); setTrip((res as unknown as { data: Trip }).data); } catch (err: unknown) { setError(err instanceof Error ? err.message : "تعذّر تحميل بيانات الرحلة."); } finally { setLoading(false); } }, [tripId]); useEffect(() => { loadTrip(); }, [loadTrip]); // ── Edit submit ─────────────────────────────────────────────────────────── const handleEditSubmit = useCallback( async ( payload: CreateTripPayload | UpdateTripPayload, _isNew: boolean, ): Promise => { if (!trip) return false; try { const token = getStoredToken(); await tripService.update(trip.id, payload as UpdateTripPayload, token); await loadTrip(); return true; } catch { return false; } }, [trip, loadTrip], ); // ── Delete ──────────────────────────────────────────────────────────────── const handleConfirmDelete = useCallback(async () => { if (!trip) return; setDeleting(true); try { const token = getStoredToken(); await tripService.delete(trip.id, token); router.back(); } catch { setDeleting(false); setDeleteOpen(false); } }, [trip, router]); const statusConfig = trip ? TRIP_STATUS_MAP[trip.status] : null; // ── Loading ─────────────────────────────────────────────────────────────── if (loading) { return (
); } // ── Error ───────────────────────────────────────────────────────────────── if (error || !trip) { return (

{error ?? "الرحلة غير موجودة."}

); } return ( <>
{/* ── Header ── */}
{/* Back + trip info */}
{/* Trip icon */}

{trip.title}

{trip.tripNumber} {statusConfig && ( {statusConfig.label} )} {trip.isDeleted && ( محذوفة )}
{/* Actions */}
{/* ── Stats row ── */}
{/* ── Content grid ── */}
{/* Basic Info */} {/* Driver */} {trip.driver ? ( <> ) : (

لا توجد بيانات للسائق.

)}
{/* Car */} {trip.car ? ( <> ) : (

لا توجد بيانات للسيارة.

)}
{/* System Info */} {trip.isDeleted && ( )}
{/* ── Notes (full width, if any) ── */} {trip.notes && (

{trip.notes}

)} {/* ── Report section ── */}
{/* ── Edit modal ── */} {editOpen && ( setEditOpen(false)} onSubmit={handleEditSubmit} /> )} {/* ── Delete modal ── */} {deleteOpen && ( setDeleteOpen(false)} onConfirm={handleConfirmDelete} /> )} ); }