<?php

namespace App\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Illuminate\Support\Collection;

class CollectionOrNull implements CastsAttributes
{
	/**
	 * Cast the given value.
	 *
	 * @param \Illuminate\Database\Eloquent\Model $model
	 * @param string $key
	 * @param mixed $value
	 * @param array $attributes
	 * @return Collection
	 */
	public function get($model,string $key,$value,array $attributes): Collection
	{
		return collect(json_decode($value, true));
	}

	/**
	 * Prepare the given value for storage.
	 *
	 * @param Model $model
	 * @param string $key
	 * @param mixed $value
	 * @param array $attributes
	 * @return string|null
	 */
	public function set($model,string $key,$value,array $attributes): ?string
	{
		return ($value->count()) ? json_encode($value) : NULL;
	}
}