'required|string|max:20', 'scheduledDate' => 'required|date', 'scheduledTime' => 'required', 'messageType' => 'required|in:text,template', 'messageContent'=> 'required_if:messageType,text|nullable|string', 'templateId' => 'required_if:messageType,template|nullable|integer', ]; } public function save(): void { $this->validate(); $template = $this->templateId ? WhatsappMessageTemplate::find($this->templateId) : null; WhatsappScheduledMessage::create([ 'phone_number' => preg_replace('/\D/', '', $this->phoneNumber), 'message_type' => $this->messageType, 'message_content' => $this->messageContent, 'template_id' => $this->templateId, 'template_name' => $template?->template_name, 'template_language' => $template?->language_code, 'scheduled_date' => $this->scheduledDate, 'scheduled_time' => $this->scheduledTime, 'status' => 'pending', 'created_by' => Auth::id(), ]); $this->alert('success', 'Mensaje programado correctamente.'); $this->resetForm(); } public function cancel(int $id): void { WhatsappScheduledMessage::findOrFail($id)->update(['status' => 'cancelled']); $this->alert('info', 'Mensaje cancelado.'); } public function delete(int $id): void { WhatsappScheduledMessage::findOrFail($id)->delete(); $this->alert('success', 'Registro eliminado.'); } public function resetForm(): void { $this->showForm = false; $this->phoneNumber = ''; $this->messageType = 'text'; $this->messageContent = ''; $this->templateId = null; $this->scheduledDate = ''; $this->scheduledTime = ''; } public function render() { $messages = WhatsappScheduledMessage::when($this->search, fn($q) => $q->where('phone_number', 'like', "%{$this->search}%") ->orWhere('message_content', 'like', "%{$this->search}%")) ->when($this->filterStatus, fn($q) => $q->where('status', $this->filterStatus)) ->orderByDesc('scheduled_date') ->orderByDesc('scheduled_time') ->paginate(20); $templates = WhatsappMessageTemplate::where('status', 'approved')->get(); return view('livewire.whatsapp.show-programados', compact('messages', 'templates')); } }