'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { signIn } from 'next-auth/react'; import { ArrowLeft, Delete } from 'lucide-react'; interface Operator { id: string; email: string; } // ── State types ────────────────────────────────────────────────────────────── type PickerState = | { step: 'list' } | { step: 'pin'; operator: Operator }; const PIN_MIN = 4; const PIN_MAX = 6; // ── Sub-components ─────────────────────────────────────────────────────────── function OperatorList({ operators, onSelect, }: { operators: Operator[]; onSelect: (op: Operator) => void; }) { if (operators.length === 0) { return (

Nenhum operador encontrado. Execute pnpm db:seed.

); } return (
{operators.map((op) => ( ))}
); } function PinPad({ operator, onBack, }: { operator: Operator; onBack: () => void; }) { const router = useRouter(); const [digits, setDigits] = useState(''); const [busy, setBusy] = useState(false); const [error, setError] = useState(null); function press(d: string) { if (digits.length >= PIN_MAX) return; setDigits((prev) => prev + d); setError(null); } function erase() { setDigits((prev) => prev.slice(0, -1)); setError(null); } async function submit() { if (digits.length < PIN_MIN || busy) return; setBusy(true); setError(null); try { const result = await signIn('credentials', { email: operator.email, pin: digits, redirect: false, }); if (result?.error) { setDigits(''); setError('PIN incorreto ou conta bloqueada. Tente novamente.'); } else { router.push('/'); router.refresh(); } } catch { setDigits(''); setError('Erro inesperado. Tente novamente.'); } finally { setBusy(false); } } const keys = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '', '0', 'del']; return (
{/* Header */}

Operador selecionado

{operator.email}

{/* PIN dots */}
{Array.from({ length: PIN_MAX }).map((_, i) => (
))}
{/* Error */} {error && (

{error}

)} {/* Numpad */}
{keys.map((key, idx) => { if (key === '') { return
; } if (key === 'del') { return ( ); } return ( ); })}
{/* Submit */}
); } // ── Main component ─────────────────────────────────────────────────────────── export function OperatorPicker({ operators }: { operators: Operator[] }) { const [state, setState] = useState({ step: 'list' }); if (state.step === 'pin') { return ( setState({ step: 'list' })} /> ); } return ( setState({ step: 'pin', operator: op })} /> ); }