-- 1. [핵심] UI 리소스 마스터 테이블
-- 이 테이블은 웹사이트의 모든 UI 요소(라벨, 데이터)의 '설계도' 역할을 합니다.
CREATE TABLE IF NOT EXISTS `g5_ui_manager` (
    `um_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유 ID',
    `screen_code` varchar(50) NOT NULL COMMENT '화면 코드 (e.g. order_form)',
    `group_code` varchar(50) NOT NULL COMMENT '화면 내 그룹 코드 (e.g. address_info)',
    `resource_code` varchar(50) NOT NULL COMMENT '리소스 코드 (개발자가 사용)',
    `resource_type` enum('LABEL','DATA') NOT NULL COMMENT '리소스 타입 (라벨, 데이터)',
    `resource_desc` varchar(255) DEFAULT NULL COMMENT '리소스에 대한 설명 (관리자용)',
    `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부',
    `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    `created_by` varchar(20) NOT NULL COMMENT '생성자',
    `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일',
    `updated_by` varchar(20) NOT NULL COMMENT '수정자',
    PRIMARY KEY (`um_id`),
    UNIQUE KEY `resource_identifier` (`screen_code`,`group_code`,`resource_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] UI 리소스 관리자';

-- 2. 계층형 카테고리 테이블 ('DATA' 타입 리소스가 사용할 데이터)
-- um_id를 통해 어떤 리소스에 속한 데이터인지 명시합니다.
CREATE TABLE IF NOT EXISTS `g5_form_category` (
    `fc_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '카테고리 고유 ID',
    `um_id` int(11) NOT NULL COMMENT 'UI 리소스 ID (g5_ui_manager.um_id)',
    `parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '부모 카테고리 ID (0이면 최상위)',
    `fc_key` varchar(255) NOT NULL COMMENT 'DB에 저장될 값 (고유값)',
    `fc_order` int(11) NOT NULL DEFAULT '0' COMMENT '정렬 순서',
    `is_used` tinyint(1) NOT NULL DEFAULT '1' COMMENT '사용 여부',
    `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '삭제 여부',
    `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '생성일',
    `created_by` varchar(20) NOT NULL COMMENT '생성자',
    `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일',
    `updated_by` varchar(20) NOT NULL COMMENT '수정자',
    PRIMARY KEY (`fc_id`),
    KEY `um_id` (`um_id`),
    KEY `parent_id` (`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] 계층형 폼 카테고리';

-- 3. 공용 다국어 정보 테이블
-- 'LABEL' 타입의 실제 텍스트와 'DATA' 타입의 카테고리 이름을 모두 저장합니다.
CREATE TABLE IF NOT EXISTS `g5_common_lang` (
    `cl_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유 ID',
    `target_table` varchar(50) NOT NULL COMMENT '대상 테이블명',
    `target_id` int(11) NOT NULL COMMENT '대상 레코드 ID',
    `lang_code` varchar(10) NOT NULL COMMENT '언어 코드',
    `cl_name` varchar(255) NOT NULL COMMENT '화면에 표시될 이름/값',
    `cl_description` text COMMENT '부가 설명 (툴팁 등)',
    `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '수정일',
    `updated_by` varchar(20) NOT NULL COMMENT '수정자',
    PRIMARY KEY (`cl_id`),
    UNIQUE KEY `target_lang` (`target_table`,`target_id`,`lang_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] 공용 다국어 정보';

-- 4. 변경 이력 테이블
CREATE TABLE IF NOT EXISTS `g5_form_option_history` (
    `fh_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '고유 ID',
    `table_name` varchar(50) NOT NULL COMMENT '변경된 테이블명',
    `record_id` int(11) NOT NULL COMMENT '변경된 레코드 ID',
    `action_type` varchar(10) NOT NULL COMMENT '작업 종류',
    `change_data` longtext COMMENT '변경된 데이터 (JSON)',
    `changed_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '변경일',
    `changed_by` varchar(20) NOT NULL COMMENT '변경자',
    PRIMARY KEY (`fh_id`),
    KEY `table_name_record_id` (`table_name`,`record_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='[솔루션] 폼 옵션 변경 이력';