<?php

namespace App\Models;

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

class Setting extends Model
{
    protected $fillable = [
        'site_name',
        'site_title',
        'site_description',
        'site_keywords',
        'admin_email',
        'phone',
        'fax',
        'gtm_code',
        'favicon',
        'logo',
        'additional_settings',
    ];

    protected $casts = [
        'additional_settings' => 'array',
    ];

    /**
     * Get the first settings record or create default one
     */
    public static function getSettings()
    {
        return Cache::remember('system_settings', 3600, function () {
            return self::first() ?? self::createDefault();
        });
    }

    /**
     * Create default settings record
     */
    public static function createDefault()
    {
        return self::create([
            'site_name'   => config('app.name', 'Mattock'),
            'site_title'  => config('app.name', 'Mattock'),
            'admin_email' => config('mail.from.address'),
        ]);
    }

    /**
     * Update settings and clear cache
     */
    public function updateSettings(array $data)
    {
        $this->update($data);
        Cache::forget('system_settings');

        return $this;
    }

    /**
     * Get a specific setting value
     */
    public static function get($key, $default = null)
    {
        $settings = self::getSettings();

        return $settings->$key ?? $default;
    }
}
