<?php

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

/**
 * common_codes에 그룹 추가 및 item_type과 연결
 *
 * 구조:
 * - group (부모): code_group='group', code='1', name='품목'
 * - item_type (자식): parent_id로 group 연결
 *
 * API 사용:
 * - /api/v1/items?group_id=1 → 품목 그룹 전체 (FG, PT, SM, RM, CS)
 */
return new class extends Migration
{
    public function up(): void
    {
        // 1. 품목 그룹 추가 (code_group='group', code='1')
        $groupId = DB::table('common_codes')->insertGetId([
            'tenant_id' => 1,
            'code_group' => 'group',
            'code' => '1',
            'name' => '품목',
            'description' => '품목 관리 그룹 (FG, PT, SM, RM, CS)',
            'is_active' => true,
            'sort_order' => 1,
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // 2. 기존 item_type의 parent_id를 group으로 연결
        DB::table('common_codes')
            ->where('code_group', 'item_type')
            ->whereIn('code', ['FG', 'PT', 'SM', 'RM', 'CS'])
            ->update(['parent_id' => $groupId]);

        // 3. item_type의 attributes에서 source_table을 items로 통일
        $itemTypes = DB::table('common_codes')
            ->where('code_group', 'item_type')
            ->whereIn('code', ['FG', 'PT', 'SM', 'RM', 'CS'])
            ->get();

        foreach ($itemTypes as $itemType) {
            $attributes = json_decode($itemType->attributes, true) ?? [];
            $attributes['source_table'] = 'items';

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

    public function down(): void
    {
        // 1. item_type의 parent_id 초기화
        DB::table('common_codes')
            ->where('code_group', 'item_type')
            ->whereIn('code', ['FG', 'PT', 'SM', 'RM', 'CS'])
            ->update(['parent_id' => null]);

        // 2. group 삭제
        DB::table('common_codes')
            ->where('code_group', 'group')
            ->where('code', '1')
            ->delete();
    }
};
