<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Saltacoda extends \App\Models\AbstractModels\AbstractSaltacoda
{
    public const ISTRUZIONE_SLOTS = [
        'apertura',
        'chiusura',
        'pre_invio',
        'post_invio',
    ];

    public static function defaultSlot(): array
    {
        return [
            'attivo' => false,
            'titolo' => '',
            'testo' => '',
        ];
    }

    public static function defaultIstruzioni(): array
    {
        return array_fill_keys(self::ISTRUZIONE_SLOTS, self::defaultSlot());
    }

    public static function normalizeIstruzioni(mixed $raw): array
    {
        $normalized = self::defaultIstruzioni();

        if (is_string($raw) && $raw !== '') {
            $raw = json_decode($raw, true);
        }

        if (! is_array($raw)) {
            return $normalized;
        }

        foreach (self::ISTRUZIONE_SLOTS as $slot) {
            $incoming = $raw[$slot] ?? null;
            if (! is_array($incoming)) {
                continue;
            }

            $normalized[$slot] = [
                'attivo' => (bool) ($incoming['attivo'] ?? false),
                'titolo' => trim((string) ($incoming['titolo'] ?? $incoming['label'] ?? '')),
                'testo' => trim((string) ($incoming['testo'] ?? $incoming['value'] ?? '')),
            ];
        }

        return $normalized;
    }

    public function getIstruzioni(): array
    {
        return self::normalizeIstruzioni($this->istruzioni);
    }

    public function getIstruzioniApertura(): ?array
    {
        return $this->getIstruzioni()['apertura'] ?? null;
    }

    public function getIstruzioniChiusura(): ?array
    {
        return $this->getIstruzioni()['chiusura'] ?? null;
    }

    public function getIstruzioniPreInvio(): ?array
    {
        return $this->getIstruzioni()['pre_invio'] ?? null;
    }

    public function getIstruzioniPostInvio(): ?array
    {
        return $this->getIstruzioni()['post_invio'] ?? null;
    }
}
