<?php

// database/seeders/DummyDataSeeder.php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DummyDataSeeder extends Seeder
{
    // 대상 테넌트 ID
    public const TENANT_ID = 287;

    // 생성자 사용자 ID
    public const USER_ID = 1;

    public function run(): void
    {
        $this->command->info('🌱 더미 데이터 시딩 시작...');
        $this->command->info('   대상 테넌트: ID '.self::TENANT_ID);

        // 1. 기본 데이터 (순서 중요)
        $this->command->info('');
        $this->command->info('📦 기본 데이터 생성...');
        $this->call([
            Dummy\DummyUserSeeder::class,           // HR용 사용자
            Dummy\DummyDepartmentSeeder::class,     // 부서
            Dummy\DummyClientGroupSeeder::class,
            Dummy\DummyBankAccountSeeder::class,
            Dummy\DummyClientSeeder::class,
        ]);

        // 2. 회계 데이터
        $this->command->info('');
        $this->command->info('💰 회계 데이터 생성...');
        $this->call([
            Dummy\DummyDepositSeeder::class,
            Dummy\DummyWithdrawalSeeder::class,
            Dummy\DummySaleSeeder::class,
            Dummy\DummyPurchaseSeeder::class,
            Dummy\DummyBadDebtSeeder::class,        // 악성채권
            Dummy\DummyBillSeeder::class,           // 어음
        ]);

        // 3. HR 데이터
        $this->command->info('');
        $this->command->info('👥 HR 데이터 생성...');
        $this->call([
            Dummy\DummyWorkSettingSeeder::class,        // 근무 설정
            Dummy\DummyAttendanceSettingSeeder::class,  // 근태 설정
            Dummy\DummyAttendanceSeeder::class,         // 근태
            Dummy\DummyLeaveGrantSeeder::class,         // 휴가 부여
            Dummy\DummyLeaveSeeder::class,              // 휴가
            Dummy\DummyCardSeeder::class,               // 법인카드
            Dummy\DummySalarySeeder::class,             // 급여
        ]);

        // 4. 결재 데이터
        $this->call([
            ApprovalTestDataSeeder::class,
        ]);

        // 5. 품목 데이터
        $this->command->info('');
        $this->command->info('📦 품목 데이터 생성...');
        $this->call([
            Dummy\DummyItemSeeder::class,
        ]);

        // 6. 기타 데이터
        $this->command->info('');
        $this->command->info('📋 기타 데이터 생성...');
        $this->call([
            Dummy\DummyPopupSeeder::class,
            Dummy\DummyPaymentSeeder::class,
        ]);

        $this->command->info('');
        $this->command->info('✅ 더미 데이터 시딩 완료!');
        $this->command->table(
            ['카테고리', '테이블', '생성 수량'],
            [
                ['기본', 'users', '15'],
                ['기본', 'departments', '11'],
                ['기본', 'client_groups', '5'],
                ['기본', 'bank_accounts', '5'],
                ['기본', 'clients', '20'],
                ['회계', 'deposits', '60'],
                ['회계', 'withdrawals', '60'],
                ['회계', 'sales', '80'],
                ['회계', 'purchases', '70'],
                ['회계', 'bad_debts', '18'],
                ['회계', 'bills', '30'],
                ['HR', 'work_settings', '1'],
                ['HR', 'attendance_settings', '1'],
                ['HR', 'attendances', '~300'],
                ['HR', 'leave_grants', '~200'],
                ['HR', 'leaves', '~50'],
                ['HR', 'cards', '5'],
                ['HR', 'salaries', '15'],
                ['결재', 'approval_forms', '3'],
                ['결재', 'approvals', '20'],
                ['결재', 'approval_steps', '~40'],
                ['품목', 'items', '10,000'],
                ['기타', 'popups', '8'],
                ['기타', 'payments', '13'],
                ['', '총계', '~11,010'],
            ]
        );
    }
}
