<?php

declare(strict_types=1);

namespace App\Domain\Ai\Providers;

use App\Domain\Ai\Contracts\AiProvider;

class MockProvider implements AiProvider
{
    public function chat(array $messages, array $options = []): array
    {
        // Extract last user message for pattern matching
        $message = '';
        foreach (array_reverse($messages) as $m) {
            if ($m['role'] === 'user') {
                $message = $m['content'];
                break;
            }
        }

        $result = $this->mockResponse($message);

        return [
            'text' => $result['text'],
            'tokens_used' => 0,
            'model' => 'mock',
            'finish_reason' => 'stop',
        ];
    }

    public function chatStream(array $messages, array $options = []): \Generator
    {
        $message = '';
        foreach (array_reverse($messages) as $m) {
            if ($m['role'] === 'user') {
                $message = $m['content'];
                break;
            }
        }

        $result = $this->mockResponse($message);
        $words = explode(' ', $result['text']);

        foreach ($words as $i => $word) {
            yield $i === 0 ? $word : ' '.$word;
        }
    }

    public function name(): string
    {
        return 'mock';
    }

    public function defaultModel(): string
    {
        return 'mock';
    }

    public function isConfigured(): bool
    {
        return true;
    }

    private function mockResponse(string $message): array
    {
        $lower = mb_strtolower($message);

        if (str_contains($lower, 'ssl') || str_contains($lower, 'sertifika')) {
            return [
                'text' => "SSL sertifikası eklemek için: Güvenlik → SSL Sertifikaları sayfasına gidin. AutoSSL otomatik olarak Let's Encrypt sertifikası alır. Manuel sertifika için private key + cert + chain yapıştırmanız gerekir.",
                'suggested_actions' => [
                    ['label' => 'SSL Sayfasına Git', 'href' => '/panel/ssl'],
                ],
            ];
        }

        if (str_contains($lower, 'domain') || str_contains($lower, 'alan adı') || str_contains($lower, 'alan adi')) {
            return [
                'text' => 'Yeni alan adı eklemek için: Hosting → Alan Adları → "Yeni Domain" butonu. Domain eklerken otomatik DNS zone oluşturulur ve SSL alabilirsiniz.',
                'suggested_actions' => [
                    ['label' => 'Alan Adları', 'href' => '/panel/domains'],
                ],
            ];
        }

        if (str_contains($lower, 'e-posta') || str_contains($lower, 'eposta') || str_contains($lower, 'mail') || str_contains($lower, 'email')) {
            return [
                'text' => 'E-posta hesabı oluşturmak için: E-posta → E-posta Hesapları → "Yeni Hesap". Forwarder, otoresponder ve spam filtresi de aynı bölümden yönetilir.',
                'suggested_actions' => [
                    ['label' => 'E-posta Hesapları', 'href' => '/panel/email'],
                ],
            ];
        }

        if (str_contains($lower, 'veritaban') || str_contains($lower, 'mysql') || str_contains($lower, 'database')) {
            return [
                'text' => 'Veritabanı oluşturmak için: Dosya & Veri → Veritabanları. phpMyAdmin erişimi için ilgili satırdaki "phpMyAdmin" butonunu kullanabilirsiniz.',
                'suggested_actions' => [
                    ['label' => 'Veritabanları', 'href' => '/panel/databases'],
                ],
            ];
        }

        if (str_contains($lower, 'yedek') || str_contains($lower, 'backup')) {
            return [
                'text' => 'Yedek almak için: Dosya & Veri → Yedekler → "Yedek Al". Tam veya kısmi (dosya/veritabanı) yedek alabilirsiniz. Yedekler uzak depolama alanınıza da gönderilebilir.',
                'suggested_actions' => [
                    ['label' => 'Yedekler', 'href' => '/panel/backups'],
                ],
            ];
        }

        if (str_contains($lower, 'php') || str_contains($lower, 'sürüm') || str_contains($lower, 'surum')) {
            return [
                'text' => 'PHP sürümünü değiştirmek için: Geliştirici → PHP Konfigürasyon. Her domain için ayrı PHP sürümü seçebilir ve INI ayarlarını özelleştirebilirsiniz.',
                'suggested_actions' => [
                    ['label' => 'PHP Konfigürasyon', 'href' => '/panel/php'],
                ],
            ];
        }

        if (str_contains($lower, 'cron') || str_contains($lower, 'zamanlan') || str_contains($lower, 'görev')) {
            return [
                'text' => "Cron görevi eklemek için: Otomasyon → Cron Görevleri. Cron ifadesi (örn: \"0 3 * * *\") ve çalıştırılacak komutu girin. Her gün saat 03:00'da çalışır.",
                'suggested_actions' => [
                    ['label' => 'Cron Görevleri', 'href' => '/panel/cron'],
                ],
            ];
        }

        if (str_contains($lower, 'wordpress') || str_contains($lower, 'wp')) {
            return [
                'text' => 'WordPress kurulumlarınızı Uygulamalar → WordPress Toolkit bölümünden yönetebilirsiniz. Güncelleme, staging, plugin yönetimi ve tek tık admin girişi mevcut.',
                'suggested_actions' => [
                    ['label' => 'WordPress Toolkit', 'href' => '/panel/wp'],
                ],
            ];
        }

        return [
            'text' => 'Onoxsoft AI henüz beta aşamasındadır. Şu konularda yardım edebilirim: SSL, alan adı, e-posta, veritabanı, dosya yöneticisi, yedekleme, PHP, cron, WordPress. Daha spesifik bir soru sorabilir misiniz?',
            'suggested_actions' => [],
        ];
    }
}
