<?php

namespace Database\Seeders\Objects;

use App\Models\Objects\ObjectType;
use Illuminate\Database\Seeder;

class ObjectTypesTableSeeder extends Seeder {
    public array $types = [
        'page-sidebar' => [
            'title' => 'Сторонний блок контентной страницы'
        ],

        'page-section' => [
            'title' => 'Секция контентной страницы',
            'children' => [
                'page-section-header' => [
                    'title' => 'Заголовок'
                ],
                'page-section-html' => [
                    'title' => 'Текстовый блок'
                ],
//                'page-section-list' => [
//                    'title' => 'Список'
//                ],
                'page-section-images' => [
                    'title' => 'Изображения'
                ],
                'page-section-documents' => [
                    'title' => 'Документы'
                ],
                'page-section-video' => [
                    'title' => 'Видео'
                ],
                'page-section-button' => [
                    'title' => 'Кнопка'
                ],
                'page-section-iframe' => [
                    'title' => 'Интерактивное окно'
                ],
                'page-section-contacts' => [
                    'title' => 'Контактная информация'
                ],
                'page-section-feedback' => [
                    'title' => 'Форма обратной связи'
                ]
            ]
        ],

        'feedback-form' => [
            'title' => '',
            'children' => [
                'feedback-form-support' => [
                    'title' => 'Обращение',
                ],
            ]
        ],

        'entry-operation' => [
            'title' => 'Действие с записью в реестре'
        ]
    ];

    public function run() {
        collect($this->types)->each(function($data, $name) {
            $this->createType($name, collect($data));
        });
    }

    public function createType($name, $data, $parent = false) {
        $type = ObjectType::firstOrCreate(['name' => $name]);
        $type->update($data->except('children')->put('parent_id', $parent->id ?? 0)->all());
        collect($data->get('children') ?? [])->each(function($data, $name) use($type) {
            $this->createType($name, collect($data), $type);
        });
    }
}
