<?php

namespace App\Setting\Data;

use Livewire\Mechanisms\HandleComponents\Synthesizers\Synth;
use Spatie\LaravelSettings\Settings;

class SettingSynthesizer extends Synth
{
    public static $key = 'setting-class';

    public static function match($target)
    {
        return $target instanceof Settings;
    }

    public function dehydrate($target)
    {
        return [$target->toArray(), ['setting_class' => get_class($target)]];
    }

    public function hydrate($value, $meta)
    {
        return app($meta['setting_class'])->fill($value);
    }

    public function get(&$target, $key)
    {
        return $target->{$key};
    }

    public function set(&$target, $key, $value)
    {
        $target->{$key} = $value;
    }
}