resetPage(); } public function updatingFiltroCanal(): void { $this->resetPage(); } public function updatingFiltroFechaDesde(): void { $this->resetPage(); } public function updatingFiltroFechaHasta(): void { $this->resetPage(); } public function updatingFiltroMes(): void { $this->resetPage(); } public function updatedFiltroMes(): void { if ($this->filtroMes) { $this->filtroFechaDesde = ''; $this->filtroFechaHasta = ''; } } public function updatedFiltroFechaDesde(): void { if ($this->filtroFechaDesde) $this->filtroMes = ''; } public function updatedFiltroFechaHasta(): void { if ($this->filtroFechaHasta) $this->filtroMes = ''; } private function applyFiltros($query): void { if ($this->filtroServicio) { $query->where('servicio', $this->filtroServicio); } if ($this->filtroCanal) { $query->where('canal', $this->filtroCanal); } if ($this->filtroMes) { $inicio = Carbon::createFromFormat('Y-m', $this->filtroMes)->startOfMonth(); $fin = $inicio->copy()->endOfMonth(); $query->whereBetween('created_at', [$inicio, $fin]); } else { if ($this->filtroFechaDesde) { $query->whereDate('created_at', '>=', $this->filtroFechaDesde); } if ($this->filtroFechaHasta) { $query->whereDate('created_at', '<=', $this->filtroFechaHasta); } } } public function render() { $query = AiUsageLog::query()->latest(); $this->applyFiltros($query); $logs = $query->paginate(30); $resumenQuery = AiUsageLog::query(); $this->applyFiltros($resumenQuery); $resumen = $resumenQuery->selectRaw(" COUNT(*) as total_llamadas, SUM(CASE WHEN resultado = 'ok' THEN 1 ELSE 0 END) as total_ok, SUM(CASE WHEN resultado = 'error' THEN 1 ELSE 0 END) as total_errores, SUM(input_tokens) as total_input_tokens, SUM(output_tokens) as total_output_tokens, SUM(audio_segundos) as total_segundos_whisper, SUM(CASE WHEN servicio = 'whisper' THEN costo ELSE 0 END) as costo_whisper, SUM(CASE WHEN servicio = 'ocr' THEN 1 ELSE 0 END) as total_fotos_ocr, SUM(CASE WHEN servicio = 'ocr' THEN costo ELSE 0 END) as costo_ocr, SUM((COALESCE(input_tokens,0) + COALESCE(output_tokens,0)) / 1000000.0 * 20000) as costo_gemini, AVG(tiempo_ms) as avg_tiempo_ms ")->first(); $meses = collect(range(0, 12))->map(function ($i) { $d = now()->subMonths($i); return [ 'value' => $d->format('Y-m'), 'label' => ucfirst($d->locale('es')->isoFormat('MMMM YYYY')), ]; }); return view('livewire.chat.show-ai-logs', compact('logs', 'resumen', 'meses')); } }