id(); $companyId = app(TenantManager::class)->currentId(); if (! $userId || ! $companyId) return; $chat = AiChat::where('user_id', $userId)->latest('updated_at')->first(); if (! $chat) { $chat = AiChat::create([ 'company_id' => $companyId, 'user_id' => $userId, 'title' => 'Conversație nouă', 'provider' => $this->defaultProvider(), ]); } $this->chatId = $chat->id; } public function getChat(): ?AiChat { return $this->chatId ? AiChat::with('messages')->find($this->chatId) : null; } public function getChats() { return AiChat::where('user_id', auth()->id()) ->latest('updated_at') ->limit(20) ->get(); } public function getUsage(): array { return app(AiAssistantService::class)->monthlyUsage(); } public function newChat(): void { $chat = AiChat::create([ 'company_id' => app(TenantManager::class)->currentId(), 'user_id' => auth()->id(), 'title' => 'Conversație nouă', 'provider' => $this->defaultProvider(), ]); $this->chatId = $chat->id; $this->newMessage = ''; } public function selectChat(int $id): void { $chat = AiChat::where('user_id', auth()->id())->where('id', $id)->first(); if ($chat) $this->chatId = $chat->id; } public function deleteChat(int $id): void { AiChat::where('user_id', auth()->id())->where('id', $id)->delete(); if ($this->chatId === $id) { $this->chatId = AiChat::where('user_id', auth()->id())->latest('updated_at')->value('id'); if (! $this->chatId) $this->newChat(); } } public function send(): void { $msg = trim($this->newMessage); if ($msg === '' || ! $this->chatId) return; $this->loading = true; $this->newMessage = ''; $chat = AiChat::find($this->chatId); if (! $chat) { $this->loading = false; return; } try { app(AiAssistantService::class)->ask($chat, $msg); } finally { $this->loading = false; } } protected function defaultProvider(): string { $tenant = app(TenantManager::class)->current(); return ($tenant?->settings['ai']['default_provider'] ?? 'claude'); } }