<?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-documents' => [
                    'title' => 'Документы'
                ],
                'page-section-media' => [
                    'title' => 'Визуальные элементы',
                    'children' => [

                        'page-section-images' => [
                            'title' => 'Изображения'
                        ],
                        'page-section-video' => [
                            'title' => 'Видео'
                        ],
                        'page-section-maps' => [
                            'title' => 'Карта'
                        ],
                    ]
                ],
                'page-section-interactive' => [
                    'title' => 'Интерактивные элементы',
                    'children' => [
                        'page-section-button' => [
                            'title' => 'Кнопка'
                        ],
                        'page-section-contacts' => [
                            'title' => 'Контактная информация'
                        ],
                        'page-section-feedback' => [
                            'title' => 'Форма обратной связи'
                        ],
                    ]
                ],
            ]
        ],

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

        'registry-entry-properties' => [
            'title' => 'Специфические свойства записи реестра',
            'children' => [
                'entry-properties-laboratory' => [
                    'title' => 'Испытательная лаборатория'
                ],
                'entry-properties-certifier' => [
                    'title' => 'Орган по сертификации'
                ],
                'entry-properties-expert' => [
                    'title' => 'Эксперт'
                ],
                'entry-properties-certificate' => [
                    'title' => 'Сертификат соответствия'
                ],
                'entry-properties-company' => [
                    'title' => 'Организация'
                ],
                'entry-properties-development' => [
                    'title' => 'Разработка'
                ],
                'entry-properties-discussion' => [
                    'title' => 'Обсуждение'
                ],
                'entry-properties-research' => [
                    'title' => 'Исследование'
                ],
                'entry-properties-technical-certificate' => [
                    'title' => 'Техническое свидетельство'
                ]
            ]
        ],

        'entry-operation' => [
            'title' => 'Действие с записью в реестре',
            'children' => [
                'entry-operation-ruleset' => [
                    '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);
        });
    }
}
