<?php

namespace Database\Seeders\Pages;

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

class PagesTableSeeder extends Seeder
{
    public array $pages = [
        'О центре' => [
            'children' => [
                'Руководство' => [],
                'Документы' => [
                    'children' => [
                        'Документы об учреждении' => [],
                        'Закупки' => [],
                        'Бухгалтерская отчетность' => [],
                        'Государственное задание' => [],
                        'Нормативные правовые акты' => [],
                        'Антимонопольное законодательство' => [],
                        'Специальная оценка условий труда' => []
                    ]
                ],
                'Структура' => [],
                'Наблюдательный совет' => [
                    'children' => [
                        'Структура' => [],
                        'Документы' => [],
                        'Решения' => []
                    ]
                ],
                'Закупки' => [],
                'Противодействие коррупции' => [
                    'children' => [
                        'ФЗ, указы, постановления' => [],
                        'Ведомственные нормативные правовые акты' => [],
                        'Внутренние нормативные документы' => [],
                        'Антикоррупционная экспертиза' => [],
                        'Методические материалы' => [],
                        'Формы документов для заполнения' => [],
                        'Финансовые сведения' => [],
                        'Aттестационная комиссия' => [],
                        'Обратная связь' => [],
                        'Остальные документы' => []
                    ]
                ]
            ]
        ],
        'Деятельность' => [
            'children' => [
                'Нормирование и стандартизация' => [
                    'children' => [
                        'Реестр сводов правил' => [],
                        'Разработка сводов правил' => [],
                        'Прикладные исследования' => [],
                        'Реестр нормативно-технической документации' => [],
                        'Методические материалы' => [],
                    ]
                ],
                'Оценка пригодности' => [
                    'children' => [
                        'Реестр технических свидетельств' => [],
                        'Заявка на оформление' => [],
                        'Предварительная заявка' => [],
                    ]
                ],
                'Технический комитет 465 «Строительство»' => [
                    'children' => [
                        'Руководство' => [],
                        'Секретариат' => [],
                        'Структура' => [],
                        'Состав' => [],
                        'Документы' => [],
                        'АИС ТК 465 «Строительство»' => [],
                    ]
                ],
                'СТУ' => [
                    'children' => [
                        'Запись на консультацию' => [],
                        'Документы' => [],
                        'Протоколы заседания НТС' => [],
                        'Ответы на часто задаваемые вопросы' => [],
                    ]
                ],
                'КСИ' => [
                    'children' => [

                    ]
                ],
                'Добровольная сертификация' => [
                    'children' => [
                        'О системе' => [],
                        'Основополагающие документы' => [],
                        'Решения ЦОС' => [],
                        'Руководящие документы' => [],
                        'Реестры' => [],
                        'Бланки документов' => [],
                    ]
                ],
                'Международная деятельность' => [
                    'children' => [
                        'ISO' => [],
                        'МТК 465 «Строительство»' => [],
                        'Межправительственный совет' => [],
                        'Базовая организация СНГ' => [],
                    ]
                ],
            ]
        ],
        'Коммерческие услуги' => [
            'children' => [
                'Сопровождение экспертизы и утверждения СП и ГОСТ' => [],
                'Сопровождение разработки и утверждения СП и ГОСТ' => [],
                'Консалтинговые услуги по разработке СП и ГОСТ' => [],
                'Экспертиза СТО и ТУ' => [],
                'Редактирование и нормоконтроль' => [],
            ]
        ],
        'Пресс-центр' => [
            'children' => [
                'Новости' => [
                    'type' => PageType::PUBLICATIONS,
                    'sub_type' => PageSubType::PUBLICATION_NEWS
                ],
                'СМИ о нас' => [
                    'type' => PageType::PUBLICATIONS,
                    'sub_type' => PageSubType::PUBLICATION_SMI
                ],
                'Фотогалерея' => [
                    'type' => PageType::PUBLICATIONS,
                    'sub_type' => PageSubType::PUBLICATION_PHOTOS
                ],
                'Видеоархив' => [
                    'type' => PageType::PUBLICATIONS,
                    'sub_type' => PageSubType::PUBLICATION_VIDEO
                ],
                'Контакты для СМИ' => [],
            ]
        ],
        'Контакты' => [
            'children' => [
                'Контактные данные' => [],
                'Как добраться' => [],
                'Консультации' => [],
                'Обратная связь' => [],
            ]
        ]
    ];

    public function run()
    {
        $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));
        $page = Page::firstOrCreate(['parent_id' => $parent->id ?? 0, 'slug' => $slug]);
        $page->update([
            'name' => $name,
            'type' => $data['type'] ?? PageType::CONTENT,
            'sub_type' => $data['sub_type'] ?? null
        ]);
        if ($v = collect($data)->except('children')->all()) $page->update($v);
        $ord = 0;
        collect($data['children'] ?? [])->each(function ($data, $name) use ($page, &$ord) {
            $data['ord'] = $ord++;
            $this->importPage($name, $data, $page);
        });
    }

}
