-- 1. SMTP 서버 설정을 저장하는 테이블
CREATE TABLE IF NOT EXISTS `g5_mail_smtp_config` (
                                                     `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID',
                                                     `name` VARCHAR(255) NOT NULL COMMENT 'SMTP 설정 이름 (관리용)',
    `host` VARCHAR(255) NOT NULL COMMENT 'SMTP 호스트 주소',
    `username` VARCHAR(255) NOT NULL COMMENT 'SMTP 사용자 아이디',
    `password` VARCHAR(255) NOT NULL COMMENT 'SMTP 사용자 비밀번호',
    `port` INT NOT NULL DEFAULT 465 COMMENT '포트 번호',
    `encryption` ENUM('none','ssl','tls') NOT NULL DEFAULT 'ssl' COMMENT '암호화 방식',
    `from_email` VARCHAR(255) NOT NULL COMMENT '발신자 이메일',
    `from_name` VARCHAR(255) NOT NULL COMMENT '발신자 이름',
    `is_use` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '사용 여부 (1:사용, 0:미사용)',
    `is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '삭제 여부 (1:삭제, 0:정상)',
    `created_by` VARCHAR(20) NOT NULL COMMENT '생성자 아이디',
    `updated_by` VARCHAR(20) NOT NULL COMMENT '수정자 아이디',
    `created_at` DATETIME NOT NULL COMMENT '생성일시',
    `updated_at` DATETIME NOT NULL COMMENT '수정일시'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] SMTP 서버 설정 정보';

-- 2. SMTP 설정 변경 이력을 기록하는 테이블
CREATE TABLE IF NOT EXISTS `g5_mail_smtp_change_log` (
                                                         `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID',
                                                         `smtp_config_id` INT UNSIGNED NOT NULL COMMENT 'SMTP 설정 ID',
                                                         `action` ENUM('insert','update','delete') NOT NULL COMMENT '작업 종류 (추가, 수정, 삭제)',
    `changed_by` VARCHAR(20) NOT NULL COMMENT '변경자 아이디',
    `change_date` DATETIME NOT NULL COMMENT '변경일시',
    `change_details` TEXT NOT NULL COMMENT '변경 상세 내용',
    KEY `smtp_config_id` (`smtp_config_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] SMTP 설정 변경 이력';

-- 3. 메일 템플릿의 본문, 헤더, 푸터 등을 저장하는 테이블
CREATE TABLE IF NOT EXISTS `g5_mail_template` (
                                                  `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID',
                                                  `code` VARCHAR(100) NOT NULL UNIQUE COMMENT '템플릿 고유 코드 (개발자용)',
    `title` VARCHAR(255) NOT NULL COMMENT '메일 제목',
    `content` LONGTEXT NOT NULL COMMENT '메일 본문 내용 (HTML)',
    `header_html` TEXT NULL COMMENT '템플릿별 헤더 HTML',
    `footer_html` TEXT NULL COMMENT '템플릿별 푸터 HTML',
    `is_use` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '사용 여부 (1:사용, 0:미사용)',
    `is_deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '삭제 여부 (1:삭제, 0:정상)',
    `created_by` VARCHAR(20) NOT NULL COMMENT '생성자 아이디',
    `updated_by` VARCHAR(20) NOT NULL COMMENT '수정자 아이디',
    `created_at` DATETIME NOT NULL COMMENT '생성일시',
    `updated_at` DATETIME NOT NULL COMMENT '수정일시'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 템플릿 정보';

-- 4. 각 템플릿에 사용되는 치환 변수({이름})와 기본값을 저장하는 테이블
CREATE TABLE IF NOT EXISTS `g5_mail_template_vars` (
                                                       `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID',
                                                       `template_id` INT UNSIGNED NOT NULL COMMENT '메일 템플릿 ID',
                                                       `var_name` VARCHAR(100) NOT NULL COMMENT '치환 변수명 (예: 이름)',
    `default_value` TEXT NULL COMMENT '치환 변수의 기본값',
    `created_at` DATETIME NOT NULL COMMENT '생성일시',
    `updated_at` DATETIME NOT NULL COMMENT '수정일시',
    KEY `template_id` (`template_id`),
    CONSTRAINT `fk_template_vars_template_id` FOREIGN KEY (`template_id`) REFERENCES `g5_mail_template`(`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 템플릿의 치환 변수 정보';

-- 5. 메일 템플릿 변경 이력을 기록하는 테이블
CREATE TABLE IF NOT EXISTS `g5_mail_template_change_log` (
                                                             `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID',
                                                             `template_id` INT UNSIGNED NOT NULL COMMENT '메일 템플릿 ID',
                                                             `action` ENUM('insert','update','delete') NOT NULL COMMENT '작업 종류 (추가, 수정, 삭제)',
    `changed_by` VARCHAR(20) NOT NULL COMMENT '변경자 아이디',
    `change_date` DATETIME NOT NULL COMMENT '변경일시',
    `change_details` TEXT NOT NULL COMMENT '변경 상세 내용',
    KEY `template_id` (`template_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 템플릿 변경 이력';

-- 6. 메일 발송 성공/실패 이력을 모두 기록하는 테이블
CREATE TABLE IF NOT EXISTS `g5_mail_send_log` (
                                                  `id` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '고유 ID',
                                                  `to_email` VARCHAR(255) NOT NULL COMMENT '수신자 이메일',
    `cc_email` VARCHAR(255) DEFAULT NULL COMMENT '참조 이메일',
    `bcc_email` VARCHAR(255) DEFAULT NULL COMMENT '숨은참조 이메일',
    `subject` VARCHAR(255) NOT NULL COMMENT '메일 제목',
    `body` LONGTEXT NOT NULL COMMENT '메일 본문 (HTML)',
    `status` ENUM('success','fail') NOT NULL COMMENT '발송 상태 (성공, 실패)',
    `error_msg` TEXT NULL COMMENT '발송 실패 시 상세 오류 메시지',
    `try_count` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '재시도 횟수',
    `max_try_count` INT UNSIGNED NOT NULL DEFAULT 3 COMMENT '최대 재시도 횟수',
    `send_time` DATETIME DEFAULT NULL COMMENT '발송 완료 일시',
    `resend_of` INT UNSIGNED DEFAULT NULL COMMENT '재발송의 원본 로그 ID',
    `is_scheduled` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '예약 발송 여부 (1:예약, 0:즉시)',
    `scheduled_time` DATETIME DEFAULT NULL COMMENT '예약 발송 시간',
    `created_by` VARCHAR(20) NOT NULL COMMENT '발송 요청자 아이디',
    `created_at` DATETIME NOT NULL COMMENT '로그 생성 일시',
    KEY `status` (`status`),
    KEY `resend_of` (`resend_of`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='[솔루션] 메일 발송 이력';
