Files
sirpremiumv2/app/Http/Livewire/Whatsapp/ShowCorreoConfig.php
T
2026-04-25 15:04:50 -05:00

110 lines
3.6 KiB
PHP

<?php
namespace App\Http\Livewire\Whatsapp;
use App\Models\WhatsappSystemConfig;
use App\Services\BancolombiaParser;
use App\Services\CorreoImapService;
use Livewire\Component;
use Jantinnerezo\LivewireAlert\LivewireAlert;
class ShowCorreoConfig extends Component
{
use LivewireAlert;
// ── Campos de configuración ──────────────────
public string $correo_imap_host = '';
public string $correo_imap_port = '993';
public string $correo_imap_ssl = '1';
public string $correo_imap_user = '';
public string $correo_imap_password = '';
public string $correo_imap_folder = 'INBOX';
public string $correo_imap_enabled = '0';
public string $correo_imap_minutos = '5'; // ventana de tiempo en minutos
// ── Estado de prueba ─────────────────────────
public bool $testing = false;
public string $testStatus = ''; // 'ok' | 'error' | ''
public string $testError = '';
public array $emails = [];
protected $rules = [
'correo_imap_host' => 'required|string|max:255',
'correo_imap_port' => 'required|integer|min:1|max:65535',
'correo_imap_user' => 'required|email',
'correo_imap_password' => 'required|string',
'correo_imap_folder' => 'required|string|max:100',
'correo_imap_minutos' => 'required|integer|min:1|max:1440',
];
public function mount(): void
{
$keys = [
'correo_imap_host', 'correo_imap_port', 'correo_imap_ssl',
'correo_imap_user', 'correo_imap_password', 'correo_imap_folder',
'correo_imap_enabled', 'correo_imap_minutos',
];
foreach ($keys as $key) {
$this->{$key} = WhatsappSystemConfig::get($key, $this->{$key});
}
}
public function save(): void
{
$this->validate();
$keys = [
'correo_imap_host', 'correo_imap_port', 'correo_imap_ssl',
'correo_imap_user', 'correo_imap_password', 'correo_imap_folder',
'correo_imap_enabled', 'correo_imap_minutos',
];
foreach ($keys as $key) {
WhatsappSystemConfig::set($key, (string) $this->{$key});
}
$this->alert('success', 'Configuración guardada correctamente.');
}
public function probar(): void
{
$this->validate();
$this->testing = true;
$this->testStatus = '';
$this->testError = '';
$this->emails = [];
try {
$service = new CorreoImapService(
host: $this->correo_imap_host,
port: (int) $this->correo_imap_port,
useSsl: $this->correo_imap_ssl === '1',
user: $this->correo_imap_user,
password: $this->correo_imap_password,
folder: $this->correo_imap_folder,
timeout: 20
);
$raw = $service->fetchLatest(5, (int) $this->correo_imap_minutos);
// Añadir datos parseados de Bancolombia a cada correo
$this->emails = array_map(function (array $email) {
$email['bancolombia'] = BancolombiaParser::parse($email['body']);
return $email;
}, $raw);
$this->testStatus = 'ok';
} catch (\Throwable $e) {
$this->testStatus = 'error';
$this->testError = $e->getMessage();
} finally {
$this->testing = false;
}
}
public function render()
{
return view('livewire.whatsapp.show-correo-config');
}
}