import { useState } from 'react' import { Dialog, DialogTitle, DialogContent, DialogActions, Button, TextField, Box, Typography, Alert, IconButton, Divider, CircularProgress, } from '@mui/material' import EditIcon from '@mui/icons-material/Edit' import DeleteIcon from '@mui/icons-material/Delete' import { LocalizationProvider, DateTimePicker } from '@mui/x-date-pickers' import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs' import dayjs from 'dayjs' import { useScheduledMessages, useCreateScheduledMessage, useUpdateScheduledMessage, useDeleteScheduledMessage, } from './api' function formatDate(d) { try { return new Date(d).toLocaleString() } catch { return d } } export default function ScheduleMessageModal({ session, onClose }) { const [message, setMessage] = useState('') const [scheduledAt, setScheduledAt] = useState(() => dayjs().add(1, 'hour')) const [editingId, setEditingId] = useState(null) const [error, setError] = useState('') const [success, setSuccess] = useState('') const { data: scheduledMessages, isLoading } = useScheduledMessages(session?.id) const createMutation = useCreateScheduledMessage() const updateMutation = useUpdateScheduledMessage() const deleteMutation = useDeleteScheduledMessage() const handleClose = () => { setMessage('') setScheduledAt(dayjs().add(1, 'hour')) setEditingId(null) setError('') setSuccess('') onClose() } const handleEdit = (msg) => { setMessage(msg.message) setScheduledAt(dayjs(msg.scheduled_at)) setEditingId(msg.id) setError('') setSuccess('') } const handleCancelEdit = () => { setMessage('') setScheduledAt(dayjs().add(1, 'hour')) setEditingId(null) setError('') setSuccess('') } const handleSave = async () => { setError('') setSuccess('') if (!message.trim()) { setError('El mensaje no puede estar vacío') return } if (!session) return const isoDate = scheduledAt.toISOString() try { if (editingId) { await updateMutation.mutateAsync({ id: editingId, sessionId: session.id, message: message.trim(), scheduledAt: isoDate, }) setSuccess('Mensaje programado actualizado') } else { await createMutation.mutateAsync({ sessionId: session.id, message: message.trim(), scheduledAt: isoDate, }) setSuccess('Mensaje programado creado') } setMessage('') setScheduledAt(dayjs().add(1, 'hour')) setEditingId(null) } catch (err) { setError(err.message) } } const handleDelete = async (id) => { if (!session) return if (!window.confirm('¿Eliminar este mensaje programado?')) return setError('') setSuccess('') try { await deleteMutation.mutateAsync({ id, sessionId: session.id }) setSuccess('Mensaje programado eliminado') } catch (err) { setError(err.message) } } return ( Programar mensaje: {session?.name || session?.phone || session?.id} setScheduledAt(v)} ampm={false} slotProps={{ textField: { fullWidth: true, size: 'small', readOnly: true, }, }} disablePast /> setMessage(e.target.value)} placeholder="Escribe el mensaje a programar..." /> {error && {error}} {success && {success}} {editingId && ( )} Mensajes programados pendientes {isLoading ? ( ) : scheduledMessages?.length === 0 ? ( No hay mensajes programados pendientes. ) : ( {scheduledMessages?.map((msg) => ( {msg.message} {formatDate(msg.scheduled_at)} handleEdit(msg)} disabled={deleteMutation.isPending}> handleDelete(msg.id)} disabled={deleteMutation.isPending}> ))} )} ) }