<?php

/**
 * common_codes의 item_type 그룹에 is_material 플래그 추가
 *
 * - FG(완제품), PT(부품): is_material = false
 * - SM(부자재), RM(원자재), CS(소모품): is_material = true
 *
 * 이 플래그는 수입검사 대상 여부 판단에 사용됨
 * 추후 items 테이블의 개별 필드로 대체 예정
 */

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        // 제품 타입 (is_material = false)
        $productTypes = ['FG', 'PT'];

        // 자재 타입 (is_material = true)
        $materialTypes = ['SM', 'RM', 'CS'];

        foreach ($productTypes as $code) {
            $this->updateAttributes($code, false);
        }

        foreach ($materialTypes as $code) {
            $this->updateAttributes($code, true);
        }
    }

    /**
     * attributes JSON에 is_material 플래그 추가
     */
    private function updateAttributes(string $code, bool $isMaterial): void
    {
        $record = DB::table('common_codes')
            ->where('code_group', 'item_type')
            ->where('code', $code)
            ->first();

        if ($record) {
            $attributes = json_decode($record->attributes ?? '{}', true);
            $attributes['is_material'] = $isMaterial;

            DB::table('common_codes')
                ->where('id', $record->id)
                ->update(['attributes' => json_encode($attributes)]);
        }
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        // is_material 플래그 제거
        $codes = ['FG', 'PT', 'SM', 'RM', 'CS'];

        foreach ($codes as $code) {
            $record = DB::table('common_codes')
                ->where('code_group', 'item_type')
                ->where('code', $code)
                ->first();

            if ($record) {
                $attributes = json_decode($record->attributes ?? '{}', true);
                unset($attributes['is_material']);

                DB::table('common_codes')
                    ->where('id', $record->id)
                    ->update(['attributes' => json_encode($attributes)]);
            }
        }
    }
};
