<?php

namespace Database\Seeders;

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

class JournalEntryMenuSeeder extends Seeder
{
    public function run(): void
    {
        $tenantId = 1;

        // 일일자금일보 메뉴 찾기
        $dailyFundMenu = Menu::withoutGlobalScopes()
            ->where('tenant_id', $tenantId)
            ->where('name', '일일자금일보')
            ->first();

        if (! $dailyFundMenu) {
            $this->command->error('일일자금일보 메뉴를 찾을 수 없습니다.');

            return;
        }

        $parentId = $dailyFundMenu->parent_id;

        // 일반전표입력 메뉴가 이미 있는지 확인
        $existingMenu = Menu::withoutGlobalScopes()
            ->where('tenant_id', $tenantId)
            ->where('name', '일반전표입력')
            ->where('parent_id', $parentId)
            ->first();

        if ($existingMenu) {
            $this->command->info('일반전표입력 메뉴가 이미 존재합니다.');

            return;
        }

        // 일일자금일보 바로 다음 sort_order로 추가
        $newSortOrder = $dailyFundMenu->sort_order + 1;

        // 기존 메뉴들의 sort_order를 밀어내기
        Menu::withoutGlobalScopes()
            ->where('parent_id', $parentId)
            ->where('tenant_id', $tenantId)
            ->where('sort_order', '>=', $newSortOrder)
            ->increment('sort_order');

        $menu = Menu::create([
            'tenant_id' => $tenantId,
            'parent_id' => $parentId,
            'name' => '일반전표입력',
            'url' => '/finance/journal-entries',
            'icon' => 'file-text',
            'sort_order' => $newSortOrder,
            'is_active' => true,
        ]);

        $this->command->info("일반전표입력 메뉴 생성: {$menu->url} (sort_order: {$newSortOrder})");

        // 결과 출력
        $this->command->info('');
        $this->command->info('=== 같은 그룹 하위 메뉴 ===');
        $children = Menu::withoutGlobalScopes()
            ->where('parent_id', $parentId)
            ->where('tenant_id', $tenantId)
            ->orderBy('sort_order')
            ->get(['name', 'url', 'sort_order']);

        foreach ($children as $child) {
            $this->command->info("{$child->sort_order}. {$child->name} ({$child->url})");
        }
    }
}
