-- ----------------------------
-- 企业邮箱配置表
-- ----------------------------
DROP TABLE IF EXISTS sys_mail_config;
CREATE TABLE sys_mail_config (
  config_id          BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '配置ID',
  config_name        VARCHAR(100)  NOT NULL COMMENT '配置名称',
  mail_type          VARCHAR(20)   NOT NULL COMMENT '邮箱类型(aliyun/tencent/netease/custom)',
  host               VARCHAR(100)  DEFAULT NULL COMMENT 'SMTP服务器地址',
  port               INT           DEFAULT NULL COMMENT '端口号',
  username           VARCHAR(100)  DEFAULT NULL COMMENT '用户名/发件人邮箱',
  password           VARCHAR(200)  DEFAULT NULL COMMENT '密码/授权码(加密存储)',
  api_key            VARCHAR(200)  DEFAULT NULL COMMENT 'API密钥(加密存储)',
  api_secret         VARCHAR(200)  DEFAULT NULL COMMENT 'API密钥Secret(加密存储)',
  region_id          VARCHAR(50)   DEFAULT NULL COMMENT '区域ID(阿里云等需要)',
  sender_name        VARCHAR(100)  DEFAULT NULL COMMENT '发件人名称',
  sender_email       VARCHAR(100)  NOT NULL COMMENT '发件人邮箱地址',
  encryption         VARCHAR(20)   DEFAULT 'ssl' COMMENT '加密方式(none/ssl/tls)',
  use_api            CHAR(1)       DEFAULT '0' COMMENT '使用API发送(0=SMTP 1=API)',
  is_default         CHAR(1)       DEFAULT '0' COMMENT '是否默认(0否 1是)',
  status             CHAR(1)       DEFAULT '0' COMMENT '状态(0正常 1停用)',
  extra_params       TEXT          COMMENT '额外参数(JSON)',
  del_flag           CHAR(1)       DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
  create_time        DATETIME      COMMENT '创建时间',
  update_by          VARCHAR(64)   DEFAULT '' COMMENT '更新者',
  update_time        DATETIME      COMMENT '更新时间',
  remark             VARCHAR(500)  DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (config_id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='企业邮箱配置表';

-- ----------------------------
-- 邮件模板表
-- ----------------------------
DROP TABLE IF EXISTS sys_mail_template;
CREATE TABLE sys_mail_template (
  template_id        BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '模板ID',
  template_name      VARCHAR(100)  NOT NULL COMMENT '模板名称',
  template_code      VARCHAR(100)  NOT NULL COMMENT '模板代码(唯一)',
  subject            VARCHAR(200)  NOT NULL COMMENT '邮件主题',
  content            TEXT          NOT NULL COMMENT '模板内容',
  content_type       VARCHAR(20)   DEFAULT 'html' COMMENT '内容类型(html/text)',
  variables          VARCHAR(500)  DEFAULT NULL COMMENT '变量列表(JSON数组)',
  status             CHAR(1)       DEFAULT '0' COMMENT '状态(0正常 1停用)',
  del_flag           CHAR(1)       DEFAULT '0' COMMENT '删除标志(0存在 2删除)',
  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
  create_time        DATETIME      COMMENT '创建时间',
  update_by          VARCHAR(64)   DEFAULT '' COMMENT '更新者',
  update_time        DATETIME      COMMENT '更新时间',
  remark             VARCHAR(500)  DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (template_id),
  UNIQUE KEY uk_template_code (template_code)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='邮件模板表';

-- ----------------------------
-- 邮件发送记录表
-- ----------------------------
DROP TABLE IF EXISTS sys_mail_log;
CREATE TABLE sys_mail_log (
  log_id             BIGINT(20)    NOT NULL AUTO_INCREMENT COMMENT '日志ID',
  config_id          BIGINT(20)    DEFAULT NULL COMMENT '配置ID',
  template_id        BIGINT(20)    DEFAULT NULL COMMENT '模板ID',
  sender             VARCHAR(100)  NOT NULL COMMENT '发件人邮箱',
  receiver           VARCHAR(1000) NOT NULL COMMENT '收件人(多个逗号分隔)',
  cc                 VARCHAR(1000) DEFAULT NULL COMMENT '抄送(多个逗号分隔)',
  bcc                VARCHAR(1000) DEFAULT NULL COMMENT '密送(多个逗号分隔)',
  subject            VARCHAR(200)  NOT NULL COMMENT '邮件主题',
  content            TEXT          COMMENT '邮件内容',
  content_type       VARCHAR(20)   DEFAULT 'html' COMMENT '内容类型(html/text)',
  attachments        VARCHAR(1000) DEFAULT NULL COMMENT '附件路径(JSON数组)',
  status             CHAR(1)       NOT NULL COMMENT '发送状态(0成功 1失败 2发送中)',
  error_msg          VARCHAR(1000) DEFAULT NULL COMMENT '错误信息',
  send_time          DATETIME      COMMENT '发送时间',
  create_by          VARCHAR(64)   DEFAULT '' COMMENT '创建者',
  create_time        DATETIME      COMMENT '创建时间',
  PRIMARY KEY (log_id),
  KEY idx_config_id (config_id),
  KEY idx_send_time (send_time),
  KEY idx_status (status)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='邮件发送记录表';

-- ----------------------------
-- 插入默认邮件模板
-- ----------------------------
INSERT INTO sys_mail_template (template_name, template_code, subject, content, content_type, variables, status, create_time, remark) VALUES
('验证码邮件', 'verify_code', '【${siteName}】验证码', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">验证码</h2><p>尊敬的用户：</p><p>您的验证码是：<strong style="font-size: 24px; color: #409EFF;">${code}</strong></p><p>验证码有效期为 ${expireMinutes} 分钟，请勿泄露给他人。</p><p style="color: #999; font-size: 12px;">如非本人操作，请忽略此邮件。</p></div></body></html>', 'html', '["siteName", "code", "expireMinutes"]', '0', NOW(), '验证码发送模板'),
('欢迎注册', 'welcome', '欢迎注册 ${siteName}', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">欢迎加入 ${siteName}</h2><p>尊敬的 ${username}：</p><p>恭喜您成功注册账号！</p><p>您可以使用此邮箱登录系统。</p><p style="color: #999; font-size: 12px;">此邮件由系统自动发送，请勿回复。</p></div></body></html>', 'html', '["siteName", "username"]', '0', NOW(), '用户注册欢迎邮件'),
('密码重置', 'reset_password', '【${siteName}】密码重置', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">密码重置</h2><p>尊敬的 ${username}：</p><p>您正在重置密码，点击下方链接完成重置：</p><p><a href="${resetLink}" style="display: inline-block; padding: 10px 20px; background-color: #409EFF; color: white; text-decoration: none; border-radius: 4px;">重置密码</a></p><p>链接有效期为 ${expireMinutes} 分钟。</p><p style="color: #999; font-size: 12px;">如非本人操作，请忽略此邮件。</p></div></body></html>', 'html', '["siteName", "username", "resetLink", "expireMinutes"]', '0', NOW(), '密码重置邮件模板'),
('系统通知', 'system_notice', '【${siteName}】系统通知', '<!DOCTYPE html><html><head><meta charset="UTF-8"></head><body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;"><div style="max-width: 600px; margin: 0 auto; padding: 20px;"><h2 style="color: #409EFF;">${title}</h2><p>尊敬的 ${username}：</p><div>${content}</div><p style="color: #999; font-size: 12px;">此邮件由系统自动发送，请勿回复。</p></div></body></html>', 'html', '["siteName", "title", "username", "content"]', '0', NOW(), '系统通知邮件模板');

-- ----------------------------
-- 邮箱配置菜单
-- ----------------------------
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
('邮件管理', 1, 10, 'mail', '', 1, 0, 'M', '0', '0', '', 'email-service', 'admin', NOW(), '邮件管理目录');

SET @parentId = LAST_INSERT_ID();

INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES
('邮箱配置', @parentId, 1, 'config', 'system/mail/config/index', 1, 0, 'C', '0', '0', 'system:mail:config:list', 'smtp-config', 'admin', NOW(), '邮箱配置菜单'),
('邮件模板', @parentId, 2, 'template', 'system/mail/template/index', 1, 0, 'C', '0', '0', 'system:mail:template:list', 'mail-template', 'admin', NOW(), '邮件模板菜单'),
('发送记录', @parentId, 3, 'log', 'system/mail/log/index', 1, 0, 'C', '0', '0', 'system:mail:log:list', 'log', 'admin', NOW(), '发送记录菜单');

-- 邮箱配置按钮
SET @configMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '邮箱配置' AND parent_id = @parentId);
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
('配置查询', @configMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:query', '#', 'admin', NOW()),
('配置新增', @configMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:add', '#', 'admin', NOW()),
('配置修改', @configMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:edit', '#', 'admin', NOW()),
('配置删除', @configMenuId, 4, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:remove', '#', 'admin', NOW()),
('发送测试', @configMenuId, 5, '', '', 1, 0, 'F', '0', '0', 'system:mail:config:test', '#', 'admin', NOW());

-- 邮件模板按钮
SET @templateMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '邮件模板' AND parent_id = @parentId);
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
('模板查询', @templateMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:query', '#', 'admin', NOW()),
('模板新增', @templateMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:add', '#', 'admin', NOW()),
('模板修改', @templateMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:edit', '#', 'admin', NOW()),
('模板删除', @templateMenuId, 4, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:remove', '#', 'admin', NOW()),
('模板预览', @templateMenuId, 5, '', '', 1, 0, 'F', '0', '0', 'system:mail:template:preview', '#', 'admin', NOW());

-- 发送记录按钮
SET @logMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '发送记录' AND parent_id = @parentId);
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
('记录查询', @logMenuId, 1, '', '', 1, 0, 'F', '0', '0', 'system:mail:log:query', '#', 'admin', NOW()),
('记录删除', @logMenuId, 2, '', '', 1, 0, 'F', '0', '0', 'system:mail:log:remove', '#', 'admin', NOW()),
('重新发送', @logMenuId, 3, '', '', 1, 0, 'F', '0', '0', 'system:mail:log:resend', '#', 'admin', NOW());
