import { useEffect, useState, useRef } from 'react'
import { useNavigate, useParams, useSearchParams } from 'react-router-dom'
import OrderSummary from '../components/OrderSummary'
import useAuthStore from '../store/authStore'
import client from '../api/client'
import { TransferIcon, MergeIcon, FlagsIcon, WaiterIcon, PrintIcon } from '../components/Icons'
function fmtPrice(v) { return Number(v).toFixed(2) + ' €' }
// ─── Print results modal ──────────────────────────────────────────────────────
function PrintResultsModal({ results, onClose }) {
return (
{/* Top bar */}
{tableName}
{error &&
{error}
}
{/* Active flag cards */}
{currentFlagIds.length > 0 && flagDefs.length > 0 && (
{currentFlagIds.map(fid => {
const def = flagDefs.find(d => d.id === fid)
if (!def) return null
return (
)
})}
)}
{!order && (
Δεν υπάρχει ενεργή παραγγελία
)}
{order && (
{/* Unprinted items warning */}
{unprintedItems.length > 0 && (
⏳
{unprintedItems.length} αντικείμενο{unprintedItems.length !== 1 ? 'α' : ''} δεν εκτυπώθηκε{unprintedItems.length !== 1 ? 'αν' : ''}
Δεν έχουν σταλεί στην κουζίνα/μπαρ
)}
{/* ── Tabs ── */}
{activeTab === 'active' && (
<>
{
// If multiple items are selected, order-again all selected items
if (selectedIds.length > 1) {
const items = activeItems.filter(i => selectedIds.includes(i.id))
setItemActionTarget({ items, singleStacked: false, multiSelect: true })
} else {
setItemActionTarget({ items: [item], singleStacked: item.quantity > 1, multiSelect: false })
}
}}
/>
{/* Floating controls row — only visible when items are selected */}
{canInteract && activeItems.length > 0 && selectedIds.length > 0 && (
{/* Clear selection */}
{/* Select all — hidden once everything is already selected */}
{!allActiveSelected && (
)}
{/* Transfer items */}
)}
>
)}
{activeTab === 'paid' && (
{paidItems.length === 0 ? (
Δεν υπάρχουν πληρωμένα αντικείμενα
) : (
{}}
/>
)}
)}
)}
{/* Action bar — sticky at bottom, only when there's an active order on the active tab */}
{order && canInteract && activeTab === 'active' && (
)}
{/* Item action modal (long-press) */}
{itemActionTarget && (
{
const items = itemActionTarget.items
sessionStorage.setItem('orderAgainItems', JSON.stringify(
items.map(it => ({
product_id: it.product_id,
quantity: it.quantity,
selected_options: (() => { try { return JSON.parse(it.selected_options || '[]') } catch { return [] } })(),
removed_ingredients: (() => { try { return JSON.parse(it.removed_ingredients || '[]') } catch { return [] } })(),
notes: it.notes || '',
}))
))
setItemActionTarget(null)
navigate(`/tables/${tableId}/add`)
}}
onSplit={() => {
setSplitItem(itemActionTarget.items[0])
setItemActionTarget(null)
}}
onClose={() => setItemActionTarget(null)}
/>
)}
{/* Split stepper modal */}
{splitItem && (
setSplitItem(null)}
/>
)}
{/* Pay confirmation */}
{confirmPay && (
i.id) : selectedIds}
activeItems={activeItems}
onConfirm={paySelected}
onClose={() => setConfirmPay(false)}
/>
)}
{/* Close confirmation */}
{confirmClose && (
setConfirmClose(false)}>
e.stopPropagation()}>
Κλείσιμο παραγγελίας;
Αυτή η ενέργεια δεν αναιρείται.
)}
{/* Print retry results */}
{printResults && (
setPrintResults(null)} />
)}
{/* Actions top sheet */}
{showActions && actionsMode === null && (
setShowActions(false)}
onTransfer={() => { setShowActions(false); setActionsMode('transfer') }}
onMerge={() => { setShowActions(false); setActionsMode('merge') }}
onSetFlags={() => { setShowActions(false); setActionsMode('flags') }}
onAssignWaiter={() => { setShowActions(false); setActionsMode('assign_waiter') }}
onPrintSynopsis={() => { setShowActions(false); setActionsMode('print_synopsis') }}
/>
)}
{/* Transfer picker */}
{actionsMode === 'transfer' && !pendingTable && (
setPendingTable({ table: t, mode: 'transfer' })}
onClose={() => setActionsMode(null)}
loading={actionDataLoading}
/>
)}
{/* Merge picker */}
{actionsMode === 'merge' && !pendingTable && (
setPendingTable({ table: t, mode: 'merge' })}
onClose={() => setActionsMode(null)}
loading={actionDataLoading}
/>
)}
{/* Move items picker */}
{actionsMode === 'move_items' && !pendingTable && (
setPendingTable({ table: t, mode: 'move_items' })}
onClose={() => setActionsMode(null)}
loading={actionDataLoading}
/>
)}
{/* Transfer / Merge / Move-items confirmation */}
{pendingTable && (
setPendingTable(null)}>
e.stopPropagation()}>
{pendingTable.mode === 'transfer' ? 'Επιβεβαίωση Μεταφοράς'
: pendingTable.mode === 'merge' ? 'Επιβεβαίωση Συγχώνευσης'
: 'Επιβεβαίωση Μεταφοράς Αντικειμένων'}
{pendingTable.mode === 'transfer' ? 'Μεταφορά παραγγελίας στο τραπέζι'
: pendingTable.mode === 'merge' ? 'Συγχώνευση παραγγελίας με το τραπέζι'
: `Μεταφορά ${selectedIds.length} αντικειμένου${selectedIds.length !== 1 ? 'ων' : ''} στο τραπέζι`}
{pendingTable.table.label || `T${pendingTable.table.number}`}
)}
{/* Flag picker */}
{actionsMode === 'flags' && (
setActionsMode(null)}
loading={actionDataLoading}
/>
)}
{/* Assign waiter */}
{actionsMode === 'assign_waiter' && order && (
w.waiter_id)}
waiters={allWaiters}
onAssigned={load}
onClose={() => setActionsMode(null)}
loading={actionDataLoading}
/>
)}
{/* Print synopsis */}
{actionsMode === 'print_synopsis' && order && (
setActionsMode(null)}
/>
)}
)
}