<?php

namespace App\Models;

/*
 * Setting — key-value хранилище настроек сайта.
 *
 * Таблица: settings | Ключи: phone, email, telegram, youtube, vk
 * get(key, default) — получить значение по ключу (через кеш 24ч)
 * set(key, value)   — сохранить значение и сбросить кеш
 * all()             — все настройки как ассоциативный массив (через кеш)
 */

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;

class Setting extends Model
{
    protected $fillable = ['key', 'value'];

    private const CACHE_KEY = 'site_settings';

    private const CACHE_TTL = 86400; // 24 часа

    // Возвращает все настройки как ['key' => 'value', ...].
    // Кешируем plain array, а не Collection — иначе file-кеш падает с __PHP_Incomplete_Class при unserialize.
    public static function all($columns = ['*']): Collection
    {
        $data = Cache::remember(self::CACHE_KEY, self::CACHE_TTL, function () {
            return parent::all(['key', 'value'])->pluck('value', 'key')->toArray();
        });

        return collect(is_array($data) ? $data : []);
    }

    // Получить одну настройку по ключу
    public static function get(string $key, string $default = ''): string
    {
        return static::all()[$key] ?? $default;
    }

    // Сохранить настройку и сбросить кеш
    public static function set(string $key, ?string $value): void
    {
        static::updateOrCreate(['key' => $key], ['value' => $value]);
        Cache::forget(self::CACHE_KEY);
    }

    // Сбросить кеш настроек (вызывается после массового сохранения)
    public static function clearCache(): void
    {
        Cache::forget(self::CACHE_KEY);
    }
}
