<?php
/*
namespace App\Services;

use App\Models\Setting;
use Illuminate\Support\Facades\Http;

class LicenseService
{
    public function check(): array
    {
        $key = Setting::get('license_key');

        if (!$key) {
            return [
                'valid' => false,
                'status' => 'empty',
                'message' => 'Ключ не задан',
            ];
        }

        try {
            $response = Http::timeout(5)->post('https://lns.vmedia.by/check', [
                'key' => $key,
                'domain' => request()->getHost(),
            ]);

            if (!$response->ok()) {
                return $this->fail('Ошибка сервера лицензий');
            }

            return $response->json();

        } catch (\Throwable $e) {
            return $this->fail('Нет связи с сервером лицензий');
        }
    }

    private function fail(string $message): array
    {
        return [
            'valid' => false,
            'status' => 'error',
            'message' => $message,
        ];
    }

    public function cached(): array
    {
        return cache()->remember('license_status', 60, function () {
            $result = $this->check();

            return [
                'valid' => (bool)($result['valid'] ?? false),
                'status' => $result['status'] ?? 'unknown',
                'message' => $result['message'] ?? null,
            ];
        });
    }
}*/


namespace App\Services;

use App\Models\Setting;
use Illuminate\Support\Facades\Http;

class LicenseService
{
    public function check(): array
    {
        $key = Setting::get('license_key');

        if (!$key) {
            return [
                'valid' => false,
                'status' => 'empty',
                'message' => 'Ключ не задан',
            ];
        }

        try {
            $response = Http::timeout(5)->post('https://lns.vmedia.by/api/licenses/check', [
                'key' => $key,
                'domain' => request()->getHost(),
            ]);

            if (!$response->ok()) {
                return $this->fail('Ошибка сервера лицензий');
            }

            return $response->json();

        } catch (\Throwable $e) {
            return $this->fail('Нет связи с сервером лицензий');
        }
    }

    private function fail(string $message): array
    {
        return [
            'valid' => false,
            'status' => 'error',
            'message' => $message,
        ];
    }

    public function cached(): array
    {
        return cache()->remember('license_status', 60, function () {
            $result = $this->check();

            // 🔴 если сервер умер
            if (($result['status'] ?? null) === 'error') {

                $lastValid = cache()->get('license_last_valid');

                // ✅ ПУСКАЕМ только если раньше был валидный ключ
                if ($lastValid && now()->diffInMinutes($lastValid) < 10) {
                    return [
                        'valid' => true,
                        'status' => 'grace',
                        'message' => 'Временный режим (сервер недоступен)',
                    ];
                }

                return [
                    'valid' => false,
                    'status' => 'error',
                    'message' => 'Сервер лицензий недоступен',
                ];
            }

            // ✅ если лицензия валидна
            if (!empty($result['valid'])) {
                cache()->put('license_last_valid', now(), 600);
            }

            return [
                'valid' => (bool)($result['valid'] ?? false),
                'status' => $result['status'] ?? 'unknown',
                'message' => $result['message'] ?? null,
                'expires_at' => $result['expires_at'] ?? null,
            ];
        });
    }
}
