<?php

declare(strict_types=1);

namespace Seka\Portal\Modul\Statistiky\Entities\Import\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;
use Seka\Portal\Modul\Statistiky\Entities\Import\ValueObjects\Subor;

/**
 * Class SuborCast
 *
 * @package Seka\Portal\Modul\Statistiky\Entities\Import\Casts
 */
final class SuborCast implements CastsAttributes
{
    /**
     * @var string
     */
    protected string $subor_nazov;

    /**
     * @var string
     */
    protected string $subor_povodne_umiestnenie;

    /**
     * @var string
     */
    protected string $subor_presunuty_do;

    /**
     * @var string
     */
    protected string $subor_velkost;

    /**
     * @param string $subor_nazov
     * @param string $subor_povodne_umiestnenie
     * @param string $subor_presunuty_do
     * @param string $subor_velkost
     */
    public function __construct(string $subor_nazov, string $subor_povodne_umiestnenie, string $subor_presunuty_do, string $subor_velkost)
    {
        $this->subor_nazov = $subor_nazov;
        $this->subor_povodne_umiestnenie = $subor_povodne_umiestnenie;
        $this->subor_presunuty_do = $subor_presunuty_do;
        $this->subor_velkost = $subor_velkost;
    }

    /**
     * @param \Illuminate\Database\Eloquent\Model $model
     * @param string                              $key
     * @param mixed                               $value
     * @param array                               $attributes
     *
     * @return \Seka\Portal\Modul\Statistiky\Entities\Import\ValueObjects\Subor
     */
    public function get($model, string $key, $value, array $attributes): Subor
    {
        return new Subor(
            $attributes[$this->subor_nazov],
            $attributes[$this->subor_povodne_umiestnenie],
            $attributes[$this->subor_presunuty_do],
            (int) $attributes[$this->subor_velkost]
        );
    }

    /**
     * @param \Illuminate\Database\Eloquent\Model $model
     * @param string                              $key
     * @param mixed                               $value
     * @param array                               $attributes
     *
     * @return array
     */
    public function set($model, string $key, $value, array $attributes): array
    {
        return [
            $this->subor_nazov => $value->nazov(),
            $this->subor_povodne_umiestnenie => $value->povodneUmiestnenie(),
            $this->subor_presunuty_do => $value->presunutyDo(),
            $this->subor_velkost => (int) $value->velkost(),
        ];
    }
}
