<?php

namespace Database\Seeders\Pages;

use App\Models\Pages\Page;
use App\Models\Pages\PageSubType;
use App\Models\Pages\PageType;
use App\Models\Registries\RegistryType;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;

class PagesTableSeeder extends Seeder {
    public array $pages = [
        'О центре' => [
            'children' => [
                'История' => [],
                'Руководство' => [],
                'Документы' => [
                    'children' => [
                        'Документы об учреждении' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE],
                        'Нормативные правовые акты' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE],
                        'Наблюдательный совет' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Государственное задание' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Закупки' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Бухгалтерская отчетность' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Антимонопольное законодательство' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Приказы Минстроя России' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Результаты специальной оценки труда' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE]
                    ]
                ],
                'Противодействие коррупции' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                'Защита персональных данных' => [],
                'Охрана труда' => []
            ]
        ],
        'Деятельность' => [
            'children' => [
                'Оценка пригодности' => [
                    'children' => [
                        'Реестр технических свидетельств' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::TECHNICAL_CERTIFICATES],
                        'Заявка на оформление' => [],
                        'Консультационные услуги' => [],
                    ]
                ],
                'ТК 465 «Строительство»' => [
                    'children' => [
                        'Руководство' => [],
                        'Структура' => ['type' => PageType::TK_STRUCTURE],
                        'Состав' => [],
                        'Документы' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'АИС ТК 465 «Строительство»' => []
                    ]
                ],
                'Реестр требований ФЗ-63' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                'Нормирование и стандартизация' => [
                    'children' => [
                        'Реестр сводов правил' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::RULESET],
                        'Реестр нормативно-технической документации' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::NTD],
                        'Разработка сводов правил' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::DEVELOPMENTS],
                        'Прикладные исследования' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::RESEARCHES],
                        'Методические материалы' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE]
                    ]
                ],
                'Международная деятельность' => [
                    'children' => [
                        'ISO' => [],
                        'МТК 465 «Строительство»' => [],
                        'Межправительственный совет' => [],
                        'Базовая организация СНГ' => [],
                        'Разработка ТР ЕАЭС' => [],
                    ]
                ],
                'СТУ' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                'КСИ' => [],
                'Добровольная сертификация' => [
                    'children' => [
                        'О системе' => [],
                        'Основополагающие документы' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CATEGORIZED],
                        'Решения ЦОС' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE],
                        'Руководящие документы' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE],
                        'Реестр органов по сертификации' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CERTIFIERS],
                        'Реестр испытательных лабораторий' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::LABORATORIES],
                        'Реестр экспертов' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::EXPERTS],
                        'Реестр сертификатов соответствия' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::CERTIFICATES],
                        'Бланки документов' => ['type' => PageType::REGISTRY, 'registry_type' => RegistryType::SIMPLE],
                    ]
                ],
            ]
        ],
        'Услуги' => [
            'children' => [
                'Технические свидетельства' => [
                    'children' => [
                        'Консалтинговые услуги ТС' => [],
                    ]
                ],
                'Консалтинг' => [
                    'children' => [
                        'Экспертиза тех регулирования' => [],
                        'Разработка нормативных документов' => [],
                        'Нормативный консалтинг' => [],
                    ]
                ],
                'Портфолио проектов' => [
                    'type' => PageType::PUBLICATIONS,
                    'sub_type' => PageSubType::PUBLICATION_PORTFOLIO
                ],
            ]
        ],
        'Пресс-центр' => [
            'children' => [
                'Новости' => [
                    'type' => PageType::PUBLICATIONS,
                    'sub_type' => PageSubType::PUBLICATION_NEWS
                ],
                'Медиа' => [
                    'children' => [
                        'Фотогалерея' => [
                            'type' => PageType::PUBLICATIONS,
                            'sub_type' => PageSubType::PUBLICATION_PHOTOS
                        ],
                        'Видеоархив' => [
                            'type' => PageType::PUBLICATIONS,
                            'sub_type' => PageSubType::PUBLICATION_VIDEO
                        ],
                    ]
                ],
//                'СМИ о нас' => [
//                    'type' => PageType::PUBLICATIONS,
//                    'sub_type' => PageSubType::PUBLICATION_SMI
//                ],
                'Контакты для СМИ' => [],
            ]
        ],
        'Контакты' => [
//            'children' => [
//                'Контактные данные' => [],
//                'Как добраться' => [],
//                'Консультации' => [],
//                'Обратная связь' => [],
//            ]
        ]
    ];

    public function run() {
        if (!Page::query()->count()) {
            $ord = 0;
            collect($this->pages)->each(function ($data, $name) use (&$ord) {
                $data['ord'] = $ord++;
                $this->importPage($name, $data);
            });
        }
    }

    public function importPage($name, $data, ?Page $parent = null) {
        $slug = Str::slug(Str::transliterate($name));
        $data += ['type' => $data['type'] ?? PageType::CONTENT, 'name' => $name];
        $page = Page::firstOrCreate(['parent_id' => $parent->id ?? 0, 'slug' => $slug]);
        if ($v = collect($data)->except('children', 'registry_type')->all()) $page->update($v);
        if ($page->type === PageType::REGISTRY) $page->registry->update(['type' => $data['registry_type'] ?? RegistryType::SIMPLE]);
        $ord = 0;
        collect($data['children'] ?? [])->each(function ($data, $name) use ($page, &$ord) {
            $data['ord'] = $ord++;
            $this->importPage($name, $data, $page);
        });
    }

}
