-- 1. 견적서 마스터 테이블
-- 고객의 견적 요청 기본 정보와 여분 필드를 저장합니다.
CREATE TABLE IF NOT EXISTS `estimate` (
    `id` int NOT NULL AUTO_INCREMENT,
    `wr_id` int DEFAULT NULL COMMENT '원본 게시물 ID',
    `status` VARCHAR(20) NOT NULL DEFAULT 'requesting' COMMENT '견적 상태 (requesting:신청중, completed:작성완료, bidding:입찰중, selected:채택됨, closed:마감)',
    `bidding_deadline` DATETIME DEFAULT NULL COMMENT '입찰 마감일시',
    `consultant_id` VARCHAR(20) DEFAULT NULL COMMENT '배정된 상담가 ID',
    `consultant_assigned_at` DATETIME DEFAULT NULL COMMENT '상담가 배정일시',
    `company_name` varchar(100) DEFAULT NULL COMMENT '회사명',
    `site_name` varchar(100) DEFAULT NULL COMMENT '현장명',
    `estimate_date` varchar(30) DEFAULT NULL COMMENT '견적일자',
    `temp_1` varchar(255) DEFAULT NULL COMMENT '임시 필드 1',
    `temp_2` varchar(255) DEFAULT NULL COMMENT '임시 필드 2',
    `temp_3` varchar(255) DEFAULT NULL COMMENT '임시 필드 3',
    `temp_4` varchar(255) DEFAULT NULL COMMENT '임시 필드 4',
    `temp_5` varchar(255) DEFAULT NULL COMMENT '임시 필드 5',
    `extra_1` varchar(255) DEFAULT NULL COMMENT '여분 필드 1',
    `extra_2` varchar(255) DEFAULT NULL COMMENT '여분 필드 2',
    `extra_3` varchar(255) DEFAULT NULL COMMENT '여분 필드 3',
    `extra_4` varchar(255) DEFAULT NULL COMMENT '여분 필드 4',
    `extra_5` varchar(255) DEFAULT NULL COMMENT '여분 필드 5',
    `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부 (1:사용, 0:미사용)',
    `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부 (1:삭제, 0:정상)',
    `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시',
    `created_by` varchar(20) DEFAULT NULL COMMENT '생성자',
    `updated_at` datetime DEFAULT NULL COMMENT '수정일시',
    `updated_by` varchar(20) DEFAULT NULL COMMENT '수정자',
    PRIMARY KEY (`id`),
    KEY `wr_id` (`wr_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='견적서 마스터 정보';



-- 2. 견적서 상세 항목 테이블
-- 각 창의 상세 사양과 여분 필드를 저장합니다.
CREATE TABLE IF NOT EXISTS `estimate_item` (
    `id` int NOT NULL AUTO_INCREMENT,
    `estimate_id` int DEFAULT NULL COMMENT '견적서 ID (estimate.id)',
    `no` int DEFAULT NULL COMMENT '항목 번호',
    `location` varchar(50) DEFAULT NULL COMMENT '위치',
    `product` varchar(50) DEFAULT NULL COMMENT '품명',
    `window_main_type` VARCHAR(255) NULL DEFAULT NULL COMMENT '창 종류',
    `windowRatio` varchar(20) DEFAULT NULL COMMENT '창비율',
    `windowType` varchar(20) DEFAULT NULL COMMENT '창호형태',
    `replacePart` varchar(20) DEFAULT NULL COMMENT '교체위치',
    `color` varchar(20) DEFAULT NULL COMMENT '색상',
    `spec_width` varchar(20) DEFAULT NULL COMMENT '규격(가로)',
    `spec_height` varchar(20) DEFAULT NULL COMMENT '규격(세로)',
    `glass_thickness` varchar(20) DEFAULT NULL COMMENT '유리두께',
    `glass_color` varchar(20) DEFAULT NULL COMMENT '유리색상',
    `screen` varchar(10) DEFAULT NULL COMMENT '방충망',
    `handle` varchar(20) DEFAULT NULL COMMENT '손잡이(시정장치)',
    `door_dir` varchar(20) DEFAULT NULL COMMENT '문방향',
    `qty` int DEFAULT NULL COMMENT '수량',
    `price` int DEFAULT NULL COMMENT '단가',
    `amount` int DEFAULT NULL COMMENT '금액',
    `install` varchar(5) DEFAULT NULL COMMENT '시공여부',
    `brand` varchar(30) DEFAULT NULL COMMENT '브랜드',
    `temp_1` varchar(255) DEFAULT NULL COMMENT '임시 필드 1',
    `temp_2` varchar(255) DEFAULT NULL COMMENT '임시 필드 2',
    `temp_3` varchar(255) DEFAULT NULL COMMENT '임시 필드 3',
    `temp_4` varchar(255) DEFAULT NULL COMMENT '임시 필드 4',
    `temp_5` varchar(255) DEFAULT NULL COMMENT '임시 필드 5',
    `extra_1` varchar(255) DEFAULT NULL COMMENT '여분 필드 1',
    `extra_2` varchar(255) DEFAULT NULL COMMENT '여분 필드 2',
    `extra_3` varchar(255) DEFAULT NULL COMMENT '여분 필드 3',
    `extra_4` varchar(255) DEFAULT NULL COMMENT '여분 필드 4',
    `extra_5` varchar(255) DEFAULT NULL COMMENT '여분 필드 5',
    `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부 (1:사용, 0:미사용)',
    `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부 (1:삭제, 0:정상)',
    `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시',
    `created_by` varchar(20) DEFAULT NULL COMMENT '생성자',
    `updated_at` datetime DEFAULT NULL COMMENT '수정일시',
    `updated_by` varchar(20) DEFAULT NULL COMMENT '수정자',
    PRIMARY KEY (`id`),
    KEY `estimate_id` (`estimate_id`),
    CONSTRAINT `fk_item_to_estimate` FOREIGN KEY (`estimate_id`) REFERENCES `estimate` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='견적서 상세 항목';


-- 3. 견적 및 항목 변경 이력 테이블
-- 모든 데이터의 생성, 수정, 삭제 이력을 기록합니다.
CREATE TABLE IF NOT EXISTS `estimate_history` (
    `id` int NOT NULL AUTO_INCREMENT COMMENT '이력 고유 ID',
    `estimate_id` int NOT NULL COMMENT '견적서 ID',
    `item_id` int DEFAULT NULL COMMENT '견적 항목 ID (항목 변경 시)',
    `action` varchar(20) NOT NULL COMMENT '작업 종류 (create, update, delete)',
    `change_details` longtext COMMENT '변경된 데이터 (JSON 형식)',
    `changed_by` varchar(20) NOT NULL COMMENT '변경자 ID',
    `changed_at` datetime NOT NULL COMMENT '변경일시',
    PRIMARY KEY (`id`),
    KEY `estimate_id` (`estimate_id`),
    KEY `item_id` (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='견적 및 항목 변경 이력';

-- 4. 대리점 입찰 정보 테이블
-- 대리점이 고객의 견적 요청에 대해 제출한 입찰(견적) 정보를 저장합니다.
CREATE TABLE IF NOT EXISTS `estimate_bidding` (
    `id` int NOT NULL AUTO_INCREMENT,
    `estimate_id` int NOT NULL COMMENT '견적서 ID (estimate.id)',
    `dealer_id` varchar(20) NOT NULL COMMENT '입찰한 대리점 회원 ID',
    `bid_amount` int NOT NULL COMMENT '대리점 제시 금액',
    `bid_message` text COMMENT '대리점 메모',
    `status` varchar(20) NOT NULL DEFAULT 'bidding' COMMENT '입찰 상태 (bidding:입찰중, selected:채택됨, unselected:미채택)',
    `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부 (1:삭제, 0:정상)',
    `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '생성일시',
    `updated_at` datetime DEFAULT NULL COMMENT '수정일시',
    `updated_by` varchar(20) DEFAULT NULL COMMENT '수정자',
    PRIMARY KEY (`id`),
    KEY `estimate_id` (`estimate_id`),
    KEY `dealer_id` (`dealer_id`),
    CONSTRAINT `fk_bidding_to_estimate` FOREIGN KEY (`estimate_id`) REFERENCES `estimate` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='대리점 입찰 정보';
