<?php

namespace Database\Seeders;

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

/**
 * 영업관리 메뉴 정리 시더
 * - 세일즈 사이트, 렌딩페이지를 영업관리 하위로 이동
 * - 중복 영업관리 메뉴 제거
 */
class SalesMenuFixSeeder extends Seeder
{
    public function run(): void
    {
        $tenantId = 1;

        // 영업관리 메뉴 찾기 (parent_id가 null인 것)
        $salesMenus = Menu::where('tenant_id', $tenantId)
            ->where('name', '영업관리')
            ->whereNull('parent_id')
            ->orderBy('id')
            ->get();

        if ($salesMenus->count() > 1) {
            // 첫 번째를 유지하고 나머지는 삭제
            $mainSalesMenu = $salesMenus->first();
            $duplicates = $salesMenus->skip(1);

            foreach ($duplicates as $dup) {
                // 중복 메뉴의 하위 메뉴들을 메인으로 이동
                Menu::where('parent_id', $dup->id)->update(['parent_id' => $mainSalesMenu->id]);
                // 중복 메뉴 삭제
                $dup->forceDelete();
                $this->command->info("중복 영업관리 메뉴 삭제: ID {$dup->id}");
            }
        }

        // 영업관리 메뉴 ID
        $salesParentId = Menu::where('tenant_id', $tenantId)
            ->where('name', '영업관리')
            ->whereNull('parent_id')
            ->value('id');

        if (! $salesParentId) {
            $this->command->error('영업관리 메뉴를 찾을 수 없습니다.');

            return;
        }

        // 세일즈 사이트 메뉴 찾아서 이동
        $salesSite = Menu::where('tenant_id', $tenantId)
            ->where('name', '세일즈 사이트')
            ->first();

        if ($salesSite) {
            $salesSite->parent_id = $salesParentId;
            $salesSite->sort_order = 5;
            $salesSite->save();
            $this->command->info('세일즈 사이트 → 영업관리 하위로 이동');
        }

        // 렌딩페이지 메뉴 찾아서 이동 및 URL 설정
        $landingPage = Menu::where('tenant_id', $tenantId)
            ->where('name', '렌딩페이지')
            ->first();

        if ($landingPage) {
            $landingPage->parent_id = $salesParentId;
            $landingPage->sort_order = 6;
            $landingPage->url = '/sales/salesmanagement/dashboard';
            $landingPage->save();
            $this->command->info('렌딩페이지 → 영업관리 하위로 이동, URL 설정');
        }

        // 영업파트너 승인 메뉴 (없으면 생성, 있으면 순서 변경)
        $approvalMenu = Menu::where('tenant_id', $tenantId)
            ->where('name', '영업파트너 승인')
            ->first();

        if ($approvalMenu) {
            $approvalMenu->parent_id = $salesParentId;
            $approvalMenu->sort_order = 5;
            $approvalMenu->save();
            $this->command->info('영업파트너 승인 → sort_order 5로 변경');
        } else {
            // 메뉴 생성
            Menu::create([
                'tenant_id' => $tenantId,
                'parent_id' => $salesParentId,
                'name' => '영업파트너 승인',
                'url' => '/sales/managers/approvals',
                'icon' => 'check-circle',
                'sort_order' => 5,
                'is_active' => true,
            ]);
            $this->command->info('영업파트너 승인 메뉴 생성 (sort_order 5)');
        }

        // 세일즈 사이트를 6으로 변경
        if ($salesSite) {
            $salesSite->sort_order = 6;
            $salesSite->save();
        }

        // 렌딩페이지를 7으로 변경
        if ($landingPage) {
            $landingPage->sort_order = 7;
            $landingPage->save();
        }

        // 결과 출력
        $this->command->info('');
        $this->command->info('=== 영업관리 하위 메뉴 ===');
        $children = Menu::where('parent_id', $salesParentId)
            ->orderBy('sort_order')
            ->get(['name', 'url', 'sort_order']);

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