-- 견적서 템플릿 테이블 생성 SQL

-- 1. 견적서 템플릿 메인 테이블
CREATE TABLE IF NOT EXISTS ESTIMATE_TEMPLATE (
    OBJID VARCHAR(50) PRIMARY KEY,
    CONTRACT_OBJID VARCHAR(50) NOT NULL,  -- CONTRACT_MGMT 테이블의 OBJID 참조
    TEMPLATE_TYPE VARCHAR(10) NOT NULL,  -- '1': 일반 견적서, '2': 장비 견적서
    
    -- 일반 견적서 필드 (Template 1)
    EXECUTOR VARCHAR(200),  -- 시행일자
    RECIPIENT VARCHAR(200),  -- 수신처
    ESTIMATE_NO VARCHAR(100),  -- 견적번호
    CONTACT_PERSON VARCHAR(100),  -- 수신인
    GREETING_TEXT TEXT,  -- 인사말
    
    -- 장비 견적서 필드 (Template 2)
    MODEL_NAME VARCHAR(200),  -- 설비 Model 품명
    MODEL_CODE VARCHAR(100),  -- 설비 Model 코드
    EXECUTOR_DATE VARCHAR(50),  -- 시행일자
    NOTES_CONTENT TEXT,  -- 비고 내용 (전체)
    VALIDITY_PERIOD VARCHAR(50),  -- 견적 유효기간
    
    -- 비고 필드 (공통)
    NOTE1 VARCHAR(500),
    NOTE2 VARCHAR(500),
    NOTE3 VARCHAR(500),
    NOTE4 VARCHAR(500),
    
    -- 카테고리 정보 (장비 견적서용, JSON 형태로 저장)
    CATEGORIES_JSON TEXT,
    
    -- 시스템 필드
    WRITER VARCHAR(50),
    REGDATE TIMESTAMP DEFAULT NOW(),
    CHG_USER_ID VARCHAR(50),
    CHGDATE TIMESTAMP DEFAULT NOW(),
    
    CONSTRAINT fk_estimate_contract FOREIGN KEY (CONTRACT_OBJID) 
        REFERENCES CONTRACT_MGMT(OBJID) ON DELETE CASCADE
);

-- 인덱스 생성
CREATE INDEX idx_estimate_contract ON ESTIMATE_TEMPLATE(CONTRACT_OBJID);
CREATE INDEX idx_estimate_type ON ESTIMATE_TEMPLATE(TEMPLATE_TYPE);

-- 코멘트 추가
COMMENT ON TABLE ESTIMATE_TEMPLATE IS '견적서 템플릿 정보';
COMMENT ON COLUMN ESTIMATE_TEMPLATE.CONTRACT_OBJID IS '견적요청 OBJID (CONTRACT_MGMT 참조)';
COMMENT ON COLUMN ESTIMATE_TEMPLATE.TEMPLATE_TYPE IS '템플릿 타입 (1:일반견적서, 2:장비견적서)';


-- 2. 견적서 템플릿 품목 테이블
CREATE TABLE IF NOT EXISTS ESTIMATE_TEMPLATE_ITEM (
    OBJID SERIAL PRIMARY KEY,
    TEMPLATE_OBJID VARCHAR(50) NOT NULL,  -- ESTIMATE_TEMPLATE 테이블의 OBJID 참조
    SEQ INTEGER NOT NULL,  -- 순번
    CATEGORY VARCHAR(100),  -- 카테고리 (장비 견적서용)
    DESCRIPTION VARCHAR(500),  -- 품명
    SPECIFICATION TEXT,  -- 규격/사양
    QUANTITY VARCHAR(50),  -- 수량
    UNIT VARCHAR(50),  -- 단위
    UNIT_PRICE NUMERIC(15,2),  -- 단가
    AMOUNT NUMERIC(15,2),  -- 금액
    NOTE VARCHAR(500),  -- 비고
    REMARK VARCHAR(500),  -- 특이사항
    
    CONSTRAINT fk_item_template FOREIGN KEY (TEMPLATE_OBJID) 
        REFERENCES ESTIMATE_TEMPLATE(OBJID) ON DELETE CASCADE
);

-- 인덱스 생성
CREATE INDEX idx_item_template ON ESTIMATE_TEMPLATE_ITEM(TEMPLATE_OBJID);
CREATE INDEX idx_item_seq ON ESTIMATE_TEMPLATE_ITEM(TEMPLATE_OBJID, SEQ);

-- 코멘트 추가
COMMENT ON TABLE ESTIMATE_TEMPLATE_ITEM IS '견적서 템플릿 품목 정보';
COMMENT ON COLUMN ESTIMATE_TEMPLATE_ITEM.TEMPLATE_OBJID IS '견적서 템플릿 OBJID';
COMMENT ON COLUMN ESTIMATE_TEMPLATE_ITEM.SEQ IS '품목 순번';
COMMENT ON COLUMN ESTIMATE_TEMPLATE_ITEM.CATEGORY IS '카테고리 (장비견적서: CNC Machine, UTILITY 등)';


-- 3. CONTRACT_MGMT 테이블에 CATEGORIES_JSON 컬럼 추가 (이미 없는 경우)
-- ALTER TABLE ESTIMATE_TEMPLATE ADD COLUMN IF NOT EXISTS CATEGORIES_JSON TEXT;

-- 샘플 데이터 조회 쿼리
-- SELECT * FROM ESTIMATE_TEMPLATE WHERE CONTRACT_OBJID = 123;
-- SELECT * FROM ESTIMATE_TEMPLATE_ITEM WHERE TEMPLATE_OBJID = 456 ORDER BY SEQ;

