-- 파이프 상세 정보 및 사용자 요구사항 테이블 생성 (PostgreSQL)
-- 2024-01-XX

-- 파이프 상세 정보 테이블
CREATE TABLE IF NOT EXISTS pipe_details (
    id SERIAL PRIMARY KEY,
    file_id INTEGER NOT NULL,
    
    -- 재질 정보
    material_standard VARCHAR(50),  -- ASTM, KS, JIS 등
    material_grade VARCHAR(50),     -- A106, A53, STPG370 등
    material_type VARCHAR(50),      -- CARBON, STAINLESS 등
    
    -- 파이프 특화 정보
    manufacturing_method VARCHAR(50),  -- SEAMLESS, WELDED, CAST
    end_preparation VARCHAR(50),      -- BOTH_ENDS_BEVELED, ONE_END_BEVELED, NO_BEVEL
    schedule VARCHAR(50),             -- SCH 10, 20, 40, 80 등
    wall_thickness VARCHAR(50),       -- 벽두께 정보
    
    -- 치수 정보
    nominal_size VARCHAR(50),         -- MAIN_NOM (인치, 직경)
    length_mm DECIMAL(10, 3),        -- LENGTH (길이)
    
    -- 신뢰도
    material_confidence DECIMAL(3, 2),
    manufacturing_confidence DECIMAL(3, 2),
    end_prep_confidence DECIMAL(3, 2),
    schedule_confidence DECIMAL(3, 2),
    
    -- 메타데이터
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
);

-- 요구사항 타입 마스터 테이블
CREATE TABLE IF NOT EXISTS requirement_types (
    id SERIAL PRIMARY KEY,
    type_code VARCHAR(50) UNIQUE NOT NULL,    -- 'IMPACT_TEST', 'HEAT_TREATMENT' 등
    type_name VARCHAR(100) NOT NULL,          -- '임팩테스트', '열처리' 등
    category VARCHAR(50) NOT NULL,            -- 'TEST', 'TREATMENT', 'CERTIFICATION', 'CUSTOM' 등
    description TEXT,                         -- 타입 설명
    is_active BOOLEAN DEFAULT TRUE,
    
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 사용자 추가 요구사항 테이블
CREATE TABLE IF NOT EXISTS user_requirements (
    id SERIAL PRIMARY KEY,
    file_id INTEGER NOT NULL,
    
    -- 요구사항 타입
    requirement_type VARCHAR(50) NOT NULL,     -- 'IMPACT_TEST', 'HEAT_TREATMENT', 'CUSTOM_SPEC', 'CERTIFICATION' 등
    
    -- 요구사항 내용
    requirement_title VARCHAR(200) NOT NULL,   -- '임팩테스트', '열처리', '인증서' 등
    requirement_description TEXT,              -- 상세 설명
    requirement_spec TEXT,                    -- 구체적 스펙 (예: "Charpy V-notch -20°C")
    
    -- 상태 관리
    status VARCHAR(20) DEFAULT 'PENDING',     -- 'PENDING', 'IN_PROGRESS', 'COMPLETED', 'CANCELLED'
    priority VARCHAR(20) DEFAULT 'NORMAL',    -- 'LOW', 'NORMAL', 'HIGH', 'URGENT'
    
    -- 담당자 정보
    assigned_to VARCHAR(100),                 -- 담당자명
    due_date DATE,                           -- 완료 예정일
    
    -- 메타데이터
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    
    FOREIGN KEY (file_id) REFERENCES files(id) ON DELETE CASCADE
);

-- 인덱스 생성
CREATE INDEX IF NOT EXISTS idx_pipe_details_file_id ON pipe_details(file_id);
CREATE INDEX IF NOT EXISTS idx_user_requirements_file_id ON user_requirements(file_id);
CREATE INDEX IF NOT EXISTS idx_user_requirements_status ON user_requirements(status);
CREATE INDEX IF NOT EXISTS idx_user_requirements_type ON user_requirements(requirement_type);

-- 기본 요구사항 타입 데이터 삽입
INSERT INTO requirement_types (type_code, type_name, category, description) VALUES
('IMPACT_TEST', '임팩테스트', 'TEST', 'Charpy V-notch, Izod 등의 충격 시험'),
('HEAT_TREATMENT', '열처리', 'TREATMENT', '정규화, 어닐링, 템퍼링 등의 열처리'),
('CERTIFICATION', '인증서', 'CERTIFICATION', '재질증명서, 시험성적서 등'),
('CUSTOM_SPEC', '특수사양', 'CUSTOM', '고객 특별 요구사항'),
('NDT_TEST', '비파괴검사', 'TEST', '초음파, 방사선, 자분탐상 등'),
('CHEMICAL_ANALYSIS', '화학분석', 'TEST', '화학성분 분석'),
('MECHANICAL_TEST', '기계적성질', 'TEST', '인장, 압축, 굽힘 시험'),
('SURFACE_TREATMENT', '표면처리', 'TREATMENT', '도금, 도장, 패시베이션 등'),
('DIMENSIONAL_CHECK', '치수검사', 'INSPECTION', '치수, 형상 검사'),
('WELDING_SPEC', '용접사양', 'SPEC', '용접 방법, 용접재 등')
ON CONFLICT (type_code) DO NOTHING;

-- 트리거 함수 생성 (updated_at 자동 업데이트)
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.updated_at = CURRENT_TIMESTAMP;
    RETURN NEW;
END;
$$ language 'plpgsql';

-- 트리거 생성
CREATE TRIGGER update_pipe_details_timestamp 
    BEFORE UPDATE ON pipe_details
    FOR EACH ROW
    EXECUTE FUNCTION update_updated_at_column();

CREATE TRIGGER update_user_requirements_timestamp 
    BEFORE UPDATE ON user_requirements
    FOR EACH ROW
    EXECUTE FUNCTION update_updated_at_column(); 