<?php

namespace Database\Seeders;

use App\Models\Commons\Menu;
use Illuminate\Database\Seeder;

/**
 * 차량정비이력 메뉴를 법인차량관리 하위로 이동
 */
class VehicleMaintenanceMenuMoveSeeder extends Seeder
{
    public function run(): void
    {
        $tenantId = 1;

        // 법인차량관리 부모 메뉴 찾기
        $parentMenu = Menu::where('tenant_id', $tenantId)
            ->where('name', '법인차량관리')
            ->first();

        if (! $parentMenu) {
            $this->command->error('법인차량관리 메뉴를 찾을 수 없습니다.');

            return;
        }

        // 차량정비이력 메뉴 찾기
        $maintenanceMenu = Menu::where('tenant_id', $tenantId)
            ->where(function ($q) {
                $q->where('name', '차량정비이력')
                    ->orWhere('name', '차량정비');
            })
            ->first();

        if (! $maintenanceMenu) {
            $this->command->error('차량정비이력 메뉴를 찾을 수 없습니다.');
            Menu::where('tenant_id', $tenantId)
                ->whereNull('parent_id')
                ->orderBy('sort_order')
                ->get(['id', 'name', 'url'])
                ->each(fn ($m) => $this->command->line("  - [{$m->id}] {$m->name} ({$m->url})"));

            return;
        }

        // 이미 법인차량관리 하위에 있는지 확인
        if ($maintenanceMenu->parent_id == $parentMenu->id) {
            $this->command->info('차량정비이력은 이미 법인차량관리 하위에 있습니다.');

            return;
        }

        $oldParentId = $maintenanceMenu->parent_id;

        // 법인차량관리 하위 메뉴 중 최대 sort_order 확인
        $maxSortOrder = Menu::where('parent_id', $parentMenu->id)
            ->max('sort_order') ?? 0;

        // 차량정비이력을 법인차량관리 하위로 이동
        $maintenanceMenu->parent_id = $parentMenu->id;
        $maintenanceMenu->sort_order = $maxSortOrder + 1;
        $maintenanceMenu->save();

        $this->command->info("차량정비이력 메뉴 이동 완료: parent_id {$oldParentId} → {$parentMenu->id}");

        // 결과 출력
        $this->command->info('');
        $this->command->info('=== 법인차량관리 하위 메뉴 ===');
        Menu::where('parent_id', $parentMenu->id)
            ->orderBy('sort_order')
            ->get(['name', 'url', 'sort_order'])
            ->each(fn ($m) => $this->command->info("  {$m->sort_order}. {$m->name} ({$m->url})"));
    }
}
