<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

/**
 * 하이브리드 구조: BOM 수식/조건 + 동적 attributes
 *
 * 고정 필드 (2개):
 * - quantity_formula: BOM 수식 계산 (BP-MES 및 범용)
 * - condition: 조건부 BOM (BP-MES 및 범용)
 *
 * 가변 필드 (attributes JSON):
 * - 테넌트별 커스텀 필드 (is_bending, bending_diagram, bending_details 등)
 * - category_fields로 관리
 *
 * @see /claudedocs/mes/ITEM_MANAGEMENT_MIGRATION_GUIDE.md
 */
return new class extends Migration
{
    public function up(): void
    {
        Schema::table('product_components', function (Blueprint $table) {
            // ================================================
            // 범용 BOM 계산 필드 (2개)
            // ================================================
            if (! Schema::hasColumn('product_components', 'quantity_formula')) {
                $table->string('quantity_formula', 500)
                    ->nullable()
                    ->after('quantity')
                    ->comment('수량 계산 수식 (예: W0*H0/1000000)');
            }

            if (! Schema::hasColumn('product_components', 'condition')) {
                $table->text('condition')
                    ->nullable()
                    ->after('quantity_formula')
                    ->comment('조건부 BOM 적용 조건 (예: installation_type=CEILING)');
            }

            // ================================================
            // 동적 확장 필드 (1개)
            // - 테넌트별 커스텀 필드 저장
            // - category_fields로 스키마 관리
            // ================================================
            if (! Schema::hasColumn('product_components', 'attributes')) {
                $table->json('attributes')
                    ->nullable()
                    ->after('condition')
                    ->comment('동적 필드 (절곡품, 인증 정보 등 테넌트별 커스텀)');
            }
        });
    }

    public function down(): void
    {
        Schema::table('product_components', function (Blueprint $table) {
            $columns = [
                'attributes',
                'condition',
                'quantity_formula',
            ];

            foreach ($columns as $column) {
                if (Schema::hasColumn('product_components', $column)) {
                    $table->dropColumn($column);
                }
            }
        });
    }
};
