<?php

/**
 * prices 테이블의 item_type_code를 items 테이블의 실제 item_type으로 업데이트
 *
 * 배경:
 * - 기존 products/materials 테이블이 items로 통합됨
 * - prices 테이블의 item_type_code가 PRODUCT/MATERIAL (레거시)와 FG/PT/SM/RM/CS (신규) 혼재
 * - 모든 값을 items.item_type 기준으로 통일
 */

use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        // PRODUCT/MATERIAL 레거시 데이터를 실제 item_type으로 업데이트
        $legacyPrices = DB::table('prices')
            ->whereIn('item_type_code', ['PRODUCT', 'MATERIAL'])
            ->get();

        $updated = 0;
        $failed = 0;

        foreach ($legacyPrices as $price) {
            // items 테이블에서 실제 item_type 조회
            $item = DB::table('items')
                ->where('id', $price->item_id)
                ->whereNull('deleted_at')
                ->first();

            if ($item && $item->item_type) {
                DB::table('prices')
                    ->where('id', $price->id)
                    ->update(['item_type_code' => $item->item_type]);
                $updated++;

                Log::info('Price item_type_code updated', [
                    'price_id' => $price->id,
                    'old_value' => $price->item_type_code,
                    'new_value' => $item->item_type,
                    'item_id' => $price->item_id,
                ]);
            } else {
                $failed++;
                Log::warning('Price item_type_code update failed - item not found', [
                    'price_id' => $price->id,
                    'item_type_code' => $price->item_type_code,
                    'item_id' => $price->item_id,
                ]);
            }
        }

        Log::info('Migration completed: update_prices_item_type_code_to_actual_item_type', [
            'total_legacy' => $legacyPrices->count(),
            'updated' => $updated,
            'failed' => $failed,
        ]);
    }

    /**
     * Reverse the migrations.
     * 주의: 원본 값 복원이 불가능하므로 롤백하지 않음
     */
    public function down(): void
    {
        // 롤백 불가 (원본 PRODUCT/MATERIAL 정보 손실)
        Log::warning('Rollback not supported for update_prices_item_type_code_to_actual_item_type');
    }
};
