<?php

/*
 * DictionarySeeder — заполняет справочники начальными данными.
 *
 * Создан: 2026-05-06
 * Запуск: php artisan db:seed (через DatabaseSeeder)
 * Идемпотентен: if(DictSection::count() > 0) return — повторный запуск ничего не делает
 *
 * Создаёт 8 системных разделов и их значения:
 *   makes (иерархический)  — 30+ марок, каждая с моделями
 *   body_types             — типы кузова
 *   countries              — страны происхождения
 *   cities                 — города (преимущественно РФ Дальний Восток + крупные)
 *   colors_ext / colors_int — цвета кузова и салона
 *   engine_volumes         — объёмы двигателя
 *   options                — опции комплектации
 */

namespace Database\Seeders;

use App\Models\DictSection;
use App\Models\DictValue;
use Illuminate\Database\Seeder;

class DictionarySeeder extends Seeder
{
    public function run(): void
    {
        if (DictSection::count() > 0) {
            return;
        }

        $sections = [
            ['makes',          'Марки и модели',    true,  true,  10],
            ['body_types',     'Типы кузова',        true,  false, 20],
            ['countries',      'Страны',             true,  false, 30],
            ['cities',         'Города',             true,  false, 40],
            ['colors_ext',     'Цвета кузова',       true,  false, 50],
            ['colors_int',     'Цвета салона',       true,  false, 60],
            ['engine_volumes', 'Объём двигателя',    true,  false, 70],
            ['options',        'Опции',              true,  false, 80],
        ];

        $ids = [];
        foreach ($sections as [$code, $label, $system, $hier, $ord]) {
            $s = DictSection::create([
                'code'             => $code,
                'label'            => $label,
                'is_system'        => $system,
                'is_hierarchical'  => $hier,
                'sort_order'       => $ord,
            ]);
            $ids[$code] = $s->id;
        }

        $this->seed('body_types', $ids, null, ['Седан','Хэтчбек','Универсал','Внедорожник','Кроссовер','Минивэн',
            'Купе','Кабриолет','Пикап','Фургон','Микроавтобус','Лифтбек','Лимузин','Родстер']);

        $this->seed('countries', $ids, null, ['Япония','Южная Корея','Германия','США','Китай','Великобритания',
            'Франция','Италия','Швеция','Россия','Чехия','Испания','Другое']);

        $this->seed('cities', $ids, null, ['Владивосток','Находка','Уссурийск','Артём','Хабаровск',
            'Комсомольск-на-Амуре','Благовещенск','Якутск','Южно-Сахалинск','Магадан',
            'Петропавловск-Камчатский','Чита','Улан-Удэ','Иркутск','Красноярск',
            'Новосибирск','Омск','Екатеринбург','Тюмень','Москва','Санкт-Петербург',
            'Казань','Краснодар','Ростов-на-Дону','Другой город']);

        $this->seed('colors_ext', $ids, null, ['Белый','Белый перламутр','Серебристый','Серый','Тёмно-серый',
            'Чёрный','Красный','Тёмно-красный','Бордовый','Синий','Тёмно-синий','Голубой',
            'Зелёный','Тёмно-зелёный','Бежевый','Коричневый','Золотой','Жёлтый','Оранжевый',
            'Фиолетовый','Розовый','Другой']);

        $this->seed('colors_int', $ids, null, ['Чёрный','Серый','Бежевый','Коричневый','Белый','Красный',
            'Синий','Комбинированный','Другой']);

        $this->seed('engine_volumes', $ids, null, ['0.6','0.8','1.0','1.2','1.3','1.4','1.5','1.6','1.8',
            '2.0','2.2','2.3','2.4','2.5','2.7','2.8','3.0','3.2','3.3','3.5','3.6','3.8',
            '4.0','4.2','4.4','4.5','5.0','5.4','5.5','6.0','6.2','6.5','6.7']);

        $this->seed('options', $ids, null, ['Кондиционер','Климат-контроль','Обогрев сидений',
            'Вентиляция сидений','Обогрев руля','Обогрев зеркал','Обогрев лобового стекла',
            'Кожаный салон','Электрорегулировка сидений','Мультируль','Круиз-контроль',
            'Адаптивный круиз-контроль','Навигация','CarPlay','Android Auto','Bluetooth','USB',
            'Камера заднего вида','Камера 360°','Парктроники передние','Парктроники задние',
            'Система слепых зон','Система удержания полосы','Бесключевой доступ',
            'Кнопка старт/стоп','Люк','Панорамная крыша','Тонировка','Ксеноновые фары',
            'Светодиодные фары','Противотуманные фары','Литые диски','Зимняя резина в комплекте',
            'Фаркоп','Пневмоподвеска','Дистанционный запуск','Сигнализация','Видеорегистратор']);

        // Марки и модели (иерархия)
        $makesData = [
            'Toyota'        => ['Alphard','Auris','Camry','Corolla','Crown','Fortuner','Harrier','Highlander','Hilux','Land Cruiser','Land Cruiser Prado','Mark X','Prius','RAV4','Sequoia','Sienna','Yaris','4Runner'],
            'Nissan'        => ['370Z','Altima','Armada','Elgrand','GT-R','Juke','Leaf','Murano','Navara','Note','Pathfinder','Patrol','Qashqai','Serena','Teana','Tiida','X-Trail'],
            'Mitsubishi'    => ['ASX','Delica','Eclipse Cross','Galant','Grandis','L200','Lancer','Outlander','Pajero','Pajero Sport'],
            'Honda'         => ['Accord','CR-V','Civic','Fit','Freed','HR-V','Insight','Odyssey','Pilot','Ridgeline','Stepwgn','Stream'],
            'Subaru'        => ['BRZ','Forester','Impreza','Legacy','Levorg','Outback','WRX','WRX STI','XV'],
            'Mazda'         => ['2','3','6','CX-3','CX-30','CX-5','CX-7','CX-9','MPV','MX-5','RX-7','RX-8'],
            'Suzuki'        => ['Escudo','Grand Vitara','Jimny','Liana','Swift','SX4','Vitara'],
            'Lexus'         => ['CT','ES','GS','GX','IS','LC','LM','LS','LX','NX','RC','RX','UX'],
            'Infiniti'      => ['EX','FX','G','M','Q50','Q60','Q70','QX50','QX56','QX60','QX80'],
            'BMW'           => ['1 Series','2 Series','3 Series','4 Series','5 Series','7 Series','i4','iX','M3','M5','X1','X3','X5','X6','X7','Z4'],
            'Mercedes-Benz' => ['A-Class','C-Class','CLA','CLS','E-Class','G-Class','GLA','GLC','GLE','GLS','S-Class','V-Class','Vito'],
            'Audi'          => ['A3','A4','A5','A6','A7','A8','Q3','Q5','Q7','Q8','R8','RS6','TT'],
            'Volkswagen'    => ['Amarok','Golf','Jetta','Passat','Polo','Tiguan','Touareg','Transporter'],
            'Porsche'       => ['911','Cayenne','Macan','Panamera','Taycan'],
            'Land Rover'    => ['Defender','Discovery','Discovery Sport','Range Rover','Range Rover Evoque','Range Rover Sport'],
            'Jeep'          => ['Cherokee','Commander','Grand Cherokee','Wrangler'],
            'Ford'          => ['Bronco','Explorer','F-150','Focus','Kuga','Mustang','Ranger','Transit'],
            'Chevrolet'     => ['Blazer','Camaro','Captiva','Colorado','Equinox','Silverado','Suburban','Tahoe','Trailblazer'],
            'Kia'           => ['Carnival','Cerato','EV6','Mohave','Seltos','Sorento','Sportage','Stinger','Telluride'],
            'Hyundai'       => ['Creta','Elantra','Ioniq 5','Ioniq 6','Kona','Palisade','Santa Fe','Sonata','Starex','Tucson'],
            'Volvo'         => ['S60','S90','V60','V90','XC40','XC60','XC90'],
            'Skoda'         => ['Enyaq','Fabia','Karoq','Kodiaq','Octavia','Superb'],
            'Renault'       => ['Arkana','Duster','Kaptur','Koleos','Logan','Megane','Sandero'],
            'LADA'          => ['Granta','Largus','Niva','Niva Legend','Niva Travel','Vesta'],
            'UAZ'           => ['Hunter','Patriot','Pickup'],
            'Chery'         => ['Arrizo 5','Arrizo 8','Omoda C5','Tiggo 4 Pro','Tiggo 7 Pro','Tiggo 8 Pro'],
            'Haval'         => ['Dargo','F7','H6','H9','Jolion'],
            'Geely'         => ['Atlas','Coolray','Monjaro','Okavango'],
            'BYD'           => ['Atto 3','Dolphin','Han','Seal','Song Plus','Tang'],
            'Tesla'         => ['Cybertruck','Model 3','Model S','Model X','Model Y'],
            'Isuzu'         => ['D-Max','MU-X'],
            'Другое'        => ['Другое'],
        ];

        $ord = 10;
        foreach ($makesData as $make => $models) {
            $parent = DictValue::create([
                'section_id' => $ids['makes'],
                'parent_id'  => null,
                'value'      => $make,
                'sort_order' => $ord,
            ]);
            foreach ($models as $mi => $model) {
                DictValue::create([
                    'section_id' => $ids['makes'],
                    'parent_id'  => $parent->id,
                    'value'      => $model,
                    'sort_order' => ($mi + 1) * 10,
                ]);
            }
            $ord += 10;
        }
    }

    // Вспомогательный метод: записывает массив значений в раздел с автоинкрементом sort_order
    // Используется для плоских разделов (body_types, countries, cities и т.д.)
    private function seed(string $code, array $ids, ?int $parentId, array $values): void
    {
        foreach ($values as $i => $value) {
            DictValue::create([
                'section_id' => $ids[$code],
                'parent_id'  => $parentId,
                'value'      => $value,
                'sort_order' => ($i + 1) * 10,
            ]);
        }
    }
}
