-- ================================
-- SPECIAL 카테고리 지원 추가 마이그레이션
-- 생성일: 2025.09.30
-- 목적: SPECIAL 카테고리 분류 및 관련 기능 지원
-- ================================

-- 1. materials 테이블 SPECIAL 카테고리 지원 확인
-- ================================

-- classified_category 컬럼이 SPECIAL 값을 지원하는지 확인
-- (이미 VARCHAR(50)이므로 추가 작업 불필요, 하지만 명시적으로 체크)

-- SPECIAL 카테고리 관련 인덱스 추가 (성능 최적화)
CREATE INDEX IF NOT EXISTS idx_materials_special_category 
ON materials(classified_category) 
WHERE classified_category = 'SPECIAL';

-- 2. SPECIAL 카테고리 분류 규칙 테이블 생성
-- ================================

-- SPECIAL 키워드 패턴 테이블
CREATE TABLE IF NOT EXISTS special_classification_patterns (
    id SERIAL PRIMARY KEY,
    pattern_type VARCHAR(20) NOT NULL, -- 'KEYWORD', 'REGEX', 'EXACT'
    pattern_value VARCHAR(200) NOT NULL,
    description TEXT,
    priority INTEGER DEFAULT 1, -- 우선순위 (낮을수록 높은 우선순위)
    is_active BOOLEAN DEFAULT TRUE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 기본 SPECIAL 키워드 패턴 삽입
INSERT INTO special_classification_patterns (pattern_type, pattern_value, description, priority) VALUES
('KEYWORD', 'SPECIAL', '영문 SPECIAL 키워드', 1),
('KEYWORD', '스페셜', '한글 스페셜 키워드', 1),
('KEYWORD', 'SPEC', '영문 SPEC 축약어', 2),
('KEYWORD', 'SPL', '영문 SPL 축약어', 2)
ON CONFLICT DO NOTHING;

-- 3. SPECIAL 자재 추가 정보 테이블
-- ================================

-- SPECIAL 자재 상세 정보 테이블 (도면 업로드 관련)
CREATE TABLE IF NOT EXISTS special_material_details (
    id SERIAL PRIMARY KEY,
    material_id INTEGER REFERENCES materials(id) ON DELETE CASCADE,
    file_id INTEGER REFERENCES files(id) ON DELETE CASCADE,
    
    -- 도면 정보
    drawing_number VARCHAR(100), -- 도면 번호
    drawing_revision VARCHAR(20), -- 도면 리비전
    drawing_uploaded BOOLEAN DEFAULT FALSE, -- 도면 업로드 여부
    drawing_file_path TEXT, -- 도면 파일 경로
    
    -- 특수 요구사항
    special_requirements TEXT, -- 특수 제작 요구사항
    manufacturing_notes TEXT, -- 제작 참고사항
    approval_required BOOLEAN DEFAULT TRUE, -- 승인 필요 여부
    approved_by VARCHAR(100), -- 승인자
    approved_at TIMESTAMP, -- 승인 일시
    
    -- 분류 정보
    classification_confidence FLOAT DEFAULT 1.0,
    classification_reason TEXT, -- 분류 근거
    
    -- 관리 정보
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 4. 인덱스 생성 (성능 최적화)
-- ================================

-- special_classification_patterns 인덱스
CREATE INDEX IF NOT EXISTS idx_special_patterns_type ON special_classification_patterns(pattern_type);
CREATE INDEX IF NOT EXISTS idx_special_patterns_active ON special_classification_patterns(is_active);
CREATE INDEX IF NOT EXISTS idx_special_patterns_priority ON special_classification_patterns(priority);

-- special_material_details 인덱스
CREATE INDEX IF NOT EXISTS idx_special_details_material ON special_material_details(material_id);
CREATE INDEX IF NOT EXISTS idx_special_details_file ON special_material_details(file_id);
CREATE INDEX IF NOT EXISTS idx_special_details_drawing_uploaded ON special_material_details(drawing_uploaded);
CREATE INDEX IF NOT EXISTS idx_special_details_approval ON special_material_details(approval_required);

-- 5. 기존 자재 재분류 (선택적)
-- ================================

-- 기존 자료 중 SPECIAL 키워드가 포함된 자재를 SPECIAL 카테고리로 재분류
UPDATE materials 
SET 
    classified_category = 'SPECIAL',
    classification_confidence = 1.0,
    updated_by = 'SYSTEM_MIGRATION',
    classified_at = CURRENT_TIMESTAMP
WHERE 
    (
        UPPER(original_description) LIKE '%SPECIAL%' OR
        UPPER(original_description) LIKE '%스페셜%' OR
        UPPER(original_description) LIKE '%SPEC%' OR
        UPPER(original_description) LIKE '%SPL%'
    )
    AND (classified_category IS NULL OR classified_category != 'SPECIAL');

-- 6. 통계 및 검증
-- ================================

-- SPECIAL 카테고리 자재 개수 확인
DO $$
DECLARE
    special_count INTEGER;
BEGIN
    SELECT COUNT(*) INTO special_count FROM materials WHERE classified_category = 'SPECIAL';
    RAISE NOTICE 'SPECIAL 카테고리로 분류된 자재 개수: %', special_count;
END $$;

-- 7. 권한 설정 (필요시)
-- ================================

-- SPECIAL 자재 관리 권한 (향후 확장용)
-- 현재는 기본 materials 테이블 권한을 따름

COMMIT;

-- ================================
-- 마이그레이션 완료 로그
-- ================================
INSERT INTO migration_log (script_name, executed_at, description) VALUES 
('24_add_special_category_support.sql', CURRENT_TIMESTAMP, 'SPECIAL 카테고리 지원 추가 및 기존 자재 재분류')
ON CONFLICT DO NOTHING;
