<?php

namespace Database\Seeders\Advisories;

use App\Imports\AdvisoryMembersImport;
use App\Models\Advisories\Advisory;
use App\Models\Advisories\AdvisoryType;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Storage;
use Maatwebsite\Excel\Facades\Excel;

class AdvisoriesTableSeeder extends Seeder {
    public array $advisories = [
        'tk465' => [
            'number' => 'ТК 465',
            'title' => 'Строительство',
            'type' => AdvisoryType::COMMITTEE,
            'is_main' => true,
            //'members' => ['import' => 'import/advisories/tk465_members.xlsx'],
            'children' => [
                'group1' => [
                    'title' => 'Организационно-методические и общетехнические вопросы в строительстве',
                    'children' => [
                        'pk2' => [
                            'title' => 'Проектирование. Основные положения нормирования',
                            'number' => 'ПК 2',
                            'type' => AdvisoryType::COMMITTEE
                        ],
                        'pk4' => [
                            'title' => 'Обследование и мониторинг технического состояния зданий и сооружений. Ремонт, восстановление и усиление конструкций зданий и сооружений',
                            'number' => 'ПК 4',
                            'type' => AdvisoryType::COMMITTEE
                        ],
                        'pk6' => [
                            'title' => 'Пожаробезопасность в строительстве',
                            'number' => 'ПК 6',
                            'type' => AdvisoryType::COMMITTEE
                        ]
                    ]
                ],
                'group2' => [
                    'title' => 'Здания и сооружения',
                    'children' => [
                        'pk10' => [
                            'title' => 'Жилые, общественные и производственные здания и сооружения',
                            'number' => 'ПК 2',
                            'type' => AdvisoryType::COMMITTEE
                        ]
                    ]
                ],
                'group3' => [
                    'title' => 'Наружные и внутренние инженерные сети и оборудование',
                    'children' => []
                ],
                'group4' => [
                    'title' => 'Строительные конструкции и основания',
                    'children' => []
                ]
            ]
        ]
    ];

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

    public function importAdvisory($name, $data, $parent = null) {
        $query = $parent ? $parent->children() : Advisory::query();
        $advisory = $query->firstOrCreate(['name' => $name]);
        $advisory->update(collect($data)->except('members', 'children')->all());
        $this->importAdvisoryMembers($advisory, $data['members'] ?? []);
        collect($data['children'] ?? [])->each(function($data, $name) use($advisory) {
            $this->importAdvisory($name, $data, $advisory);
        });
    }

    public function importAdvisoryMembers(Advisory $advisory, $data) {
        if ($path = $data['import'] ?? null) Excel::import(new AdvisoryMembersImport($advisory), Storage::path($path));
    }

}
