<?php

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

return new class extends Migration
{
    public function up(): void
    {
        // 5130 시스템의 71개 컬럼을 동적 카테고리 필드로 전환

        // 1. 견적 루트 카테고리 생성
        $rootCategoryId = DB::table('categories')->insertGetId([
            'tenant_id' => 1,
            'parent_id' => null,
            'code_group' => 'estimate',
            'code' => 'fire_shutter_estimate',
            'name' => '방화셔터 견적',
            'description' => '방화셔터 견적 루트 카테고리',
            'sort_order' => 1,
            'profile_code' => 'estimate_root',
            'is_active' => 1,
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // 2. 스크린 카테고리
        $screenCategoryId = DB::table('categories')->insertGetId([
            'tenant_id' => 1,
            'parent_id' => $rootCategoryId,
            'code_group' => 'estimate',
            'code' => 'screen_product',
            'name' => '스크린 제품',
            'description' => '실리카/와이어 스크린 제품 카테고리',
            'sort_order' => 1,
            'profile_code' => 'screen_category',
            'is_active' => 1,
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // 3. 철재 카테고리
        $steelCategoryId = DB::table('categories')->insertGetId([
            'tenant_id' => 1,
            'parent_id' => $rootCategoryId,
            'code_group' => 'estimate',
            'code' => 'steel_product',
            'name' => '철재 제품',
            'description' => '철재스라트 제품 카테고리',
            'sort_order' => 2,
            'profile_code' => 'steel_category',
            'is_active' => 1,
            'created_at' => now(),
            'updated_at' => now(),
        ]);

        // 4. 스크린 카테고리의 동적 필드들 (5130의 핵심 컬럼들)
        $screenFields = [
            // 기본 정보
            ['key' => 'model_name', 'name' => '모델명', 'type' => 'select', 'required' => true, 'order' => 1,
                'options' => ['KSS01', 'KSS02', 'KSE01', 'KWE01', 'KDSS01', '스크린비인정'],
                'desc' => '스크린 제품 모델 선택 (col4)'],

            ['key' => 'sequence', 'name' => '순번', 'type' => 'text', 'required' => false, 'order' => 2,
                'desc' => '견적 항목 순번 (col1)'],

            ['key' => 'product_category', 'name' => '대분류', 'type' => 'text', 'required' => true, 'order' => 3,
                'default' => '스크린', 'desc' => '제품 대분류 (col2)'],

            ['key' => 'sub_category', 'name' => '중분류', 'type' => 'text', 'required' => false, 'order' => 4,
                'desc' => '제품 중분류 (col3)'],

            // 사이즈 관련
            ['key' => 'open_width', 'name' => '오픈사이즈 가로(mm)', 'type' => 'number', 'required' => true, 'order' => 10,
                'desc' => '개구부 가로 사이즈 W0'],

            ['key' => 'open_height', 'name' => '오픈사이즈 세로(mm)', 'type' => 'number', 'required' => true, 'order' => 11,
                'desc' => '개구부 세로 사이즈 H0'],

            ['key' => 'make_width', 'name' => '제작사이즈 가로(mm)', 'type' => 'number', 'required' => false, 'order' => 12,
                'desc' => '제작 가로 사이즈 W1 (자동계산, col10)'],

            ['key' => 'make_height', 'name' => '제작사이즈 세로(mm)', 'type' => 'number', 'required' => false, 'order' => 13,
                'desc' => '제작 세로 사이즈 H1 (자동계산, col11)'],

            ['key' => 'quantity', 'name' => '수량', 'type' => 'number', 'required' => true, 'order' => 14,
                'default' => '1', 'desc' => '제품 수량 (col14)'],

            // 부품 관련
            ['key' => 'guide_rail_type', 'name' => '가이드레일 유형', 'type' => 'select', 'required' => true, 'order' => 20,
                'options' => ['벽면형', '측면형', '혼합형'],
                'desc' => '가이드레일 설치 방식 (col6)'],

            ['key' => 'shutter_box', 'name' => '셔터박스', 'type' => 'select', 'required' => false, 'order' => 30,
                'options' => ['', '500*380', '500*350', 'custom'],
                'desc' => '셔터박스 사이즈 선택 (col36)'],

            ['key' => 'shutter_box_custom', 'name' => '셔터박스 직접입력', 'type' => 'text', 'required' => false, 'order' => 31,
                'desc' => '셔터박스 직접입력 시 사이즈'],

            ['key' => 'front_bottom', 'name' => '전면밑', 'type' => 'number', 'required' => false, 'order' => 32,
                'default' => '50', 'desc' => '전면밑 치수 (mm)'],

            ['key' => 'rail_width', 'name' => '레일폭', 'type' => 'number', 'required' => false, 'order' => 33,
                'default' => '70', 'desc' => '레일 폭 치수 (mm)'],

            ['key' => 'box_direction', 'name' => '박스방향', 'type' => 'select', 'required' => false, 'order' => 34,
                'options' => ['양면', '밑면', '후면'],
                'default' => '양면', 'desc' => '셔터박스 설치 방향'],

            // 모터 관련
            ['key' => 'motor_bracket_size', 'name' => '모터브라켓 사이즈', 'type' => 'text', 'required' => false, 'order' => 40,
                'desc' => '중량+인치 기반 자동계산 브라켓 사이즈'],

            ['key' => 'motor_capacity', 'name' => '모터 용량', 'type' => 'text', 'required' => false, 'order' => 41,
                'desc' => '계산된 모터 용량'],

            ['key' => 'shaft_inch', 'name' => '샤프트 인치', 'type' => 'select', 'required' => false, 'order' => 42,
                'options' => ['4', '5', '6', '8'],
                'desc' => '샤프트 사이즈 (인치)'],

            // 마구리 관련
            ['key' => 'maguri_length', 'name' => '마구리 길이', 'type' => 'number', 'required' => false, 'order' => 50,
                'desc' => '마구리 길이 치수 (col45)'],

            ['key' => 'maguri_wing', 'name' => '마구리 윙', 'type' => 'number', 'required' => false, 'order' => 51,
                'desc' => '마구리 윙 길이 치수'],

            // 계산 결과
            ['key' => 'calculated_weight', 'name' => '계산 중량', 'type' => 'number', 'required' => false, 'order' => 60,
                'desc' => '자동 계산된 중량 (kg)'],

            ['key' => 'calculated_area', 'name' => '계산 면적', 'type' => 'number', 'required' => false, 'order' => 61,
                'desc' => '자동 계산된 면적 (㎡)'],

            ['key' => 'unit_price', 'name' => '단가', 'type' => 'number', 'required' => false, 'order' => 70,
                'desc' => '제품 단가 (원)'],

            ['key' => 'total_price', 'name' => '금액', 'type' => 'number', 'required' => false, 'order' => 71,
                'desc' => '총 금액 (원)'],
        ];

        // 5. 철재 카테고리의 동적 필드들
        $steelFields = [
            // 기본 정보
            ['key' => 'model_name', 'name' => '모델명', 'type' => 'select', 'required' => true, 'order' => 1,
                'options' => ['KQTS01', 'KTE01', '철재비인정'],
                'desc' => '철재 제품 모델 선택'],

            ['key' => 'sequence', 'name' => '순번', 'type' => 'text', 'required' => false, 'order' => 2,
                'desc' => '견적 항목 순번'],

            ['key' => 'product_category', 'name' => '대분류', 'type' => 'text', 'required' => true, 'order' => 3,
                'default' => '철재', 'desc' => '제품 대분류'],

            // 사이즈 관련 (철재는 다른 계산식)
            ['key' => 'open_width', 'name' => '오픈사이즈 가로(mm)', 'type' => 'number', 'required' => true, 'order' => 10,
                'desc' => '개구부 가로 사이즈 W0'],

            ['key' => 'open_height', 'name' => '오픈사이즈 세로(mm)', 'type' => 'number', 'required' => true, 'order' => 11,
                'desc' => '개구부 세로 사이즈 H0'],

            ['key' => 'make_width', 'name' => '제작사이즈 가로(mm)', 'type' => 'number', 'required' => false, 'order' => 12,
                'desc' => '제작 가로 사이즈 W1 (W0+110)'],

            ['key' => 'make_height', 'name' => '제작사이즈 세로(mm)', 'type' => 'number', 'required' => false, 'order' => 13,
                'desc' => '제작 세로 사이즈 H1 (H0+350)'],

            ['key' => 'quantity', 'name' => '수량', 'type' => 'number', 'required' => true, 'order' => 14,
                'default' => '1', 'desc' => '제품 수량'],

            // 철재 특화 필드
            ['key' => 'slat_thickness', 'name' => '스라트 두께', 'type' => 'select', 'required' => true, 'order' => 20,
                'options' => ['0.8mm', '1.0mm', '1.2mm', '1.5mm', '2.0mm'],
                'desc' => '철재 스라트 두께'],

            ['key' => 'bending_work', 'name' => '절곡 가공', 'type' => 'checkbox', 'required' => false, 'order' => 21,
                'desc' => '절곡 가공 여부'],

            ['key' => 'welding_work', 'name' => '용접 가공', 'type' => 'checkbox', 'required' => false, 'order' => 22,
                'desc' => '용접 가공 여부'],

            // 환봉, 각파이프 등
            ['key' => 'round_bar_quantity', 'name' => '환봉 수량', 'type' => 'number', 'required' => false, 'order' => 30,
                'desc' => '환봉 필요 수량 (자동계산)'],

            ['key' => 'square_pipe', 'name' => '각파이프', 'type' => 'text', 'required' => false, 'order' => 31,
                'desc' => '각파이프 사양'],

            // 모터 관련 (철재용)
            ['key' => 'motor_bracket_size', 'name' => '모터브라켓 사이즈', 'type' => 'text', 'required' => false, 'order' => 40,
                'desc' => '중량+인치 기반 브라켓 사이즈'],

            ['key' => 'shaft_inch', 'name' => '샤프트 인치', 'type' => 'select', 'required' => false, 'order' => 41,
                'options' => ['4', '5', '6', '8'],
                'desc' => '샤프트 사이즈 (인치)'],

            // 계산 결과
            ['key' => 'calculated_weight', 'name' => '계산 중량', 'type' => 'number', 'required' => false, 'order' => 60,
                'desc' => '자동 계산된 중량 (kg)'],

            ['key' => 'unit_price', 'name' => '단가', 'type' => 'number', 'required' => false, 'order' => 70,
                'desc' => '제품 단가 (원)'],

            ['key' => 'total_price', 'name' => '금액', 'type' => 'number', 'required' => false, 'order' => 71,
                'desc' => '총 금액 (원)'],
        ];

        // 6. 스크린 카테고리 필드 생성
        foreach ($screenFields as $field) {
            DB::table('category_fields')->insert([
                'tenant_id' => 1,
                'category_id' => $screenCategoryId,
                'field_key' => $field['key'],
                'field_name' => $field['name'],
                'field_type' => $field['type'],
                'is_required' => $field['required'],
                'sort_order' => $field['order'],
                'default_value' => $field['default'] ?? null,
                'options' => isset($field['options']) ? json_encode($field['options']) : null,
                'description' => $field['desc'],
                'created_at' => now(),
                'updated_at' => now(),
            ]);
        }

        // 7. 철재 카테고리 필드 생성
        foreach ($steelFields as $field) {
            DB::table('category_fields')->insert([
                'tenant_id' => 1,
                'category_id' => $steelCategoryId,
                'field_key' => $field['key'],
                'field_name' => $field['name'],
                'field_type' => $field['type'],
                'is_required' => $field['required'],
                'sort_order' => $field['order'],
                'default_value' => $field['default'] ?? null,
                'options' => isset($field['options']) ? json_encode($field['options']) : null,
                'description' => $field['desc'],
                'created_at' => now(),
                'updated_at' => now(),
            ]);
        }
    }

    public function down(): void
    {
        // 생성된 견적 관련 카테고리와 필드들 삭제
        $categoryIds = DB::table('categories')
            ->where('tenant_id', 1)
            ->where('code_group', 'estimate')
            ->pluck('id');

        DB::table('category_fields')->whereIn('category_id', $categoryIds)->delete();
        DB::table('categories')->whereIn('id', $categoryIds)->delete();
    }
};
