-- ----------------------------
-- 数据库表结构和示例数据
-- 特性：无外键约束、无版本管理
-- 所有关联关系由应用代码控制
-- ----------------------------

-- ----------------------------
-- 1. 意图与实体相关表
-- ----------------------------

-- 意图表：存储Rasa意图定义
CREATE TABLE `intent` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '意图ID，自增主键',
  `name` varchar(100) NOT NULL COMMENT '意图名称，如greet、query_bill',
  `description` varchar(500) DEFAULT NULL COMMENT '意图描述',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_intent_name` (`name`) COMMENT '确保意图名称唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储Rasa意图定义';

-- 意图样本表：存储意图对应的用户输入示例
CREATE TABLE `intent_example` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '样本ID，自增主键',
  `intent_id` bigint NOT NULL COMMENT '关联的意图ID（代码控制关联）',
  `text` varchar(1000) NOT NULL COMMENT '用户输入示例文本',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_intent_id` (`intent_id`) COMMENT '意图ID索引，加速查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储意图对应的用户输入示例';

-- 实体表：存储Rasa实体定义
CREATE TABLE `entity` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '实体ID，自增主键',
  `name` varchar(100) NOT NULL COMMENT '实体名称，如account_number、date',
  `description` varchar(500) DEFAULT NULL COMMENT '实体描述',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_entity_name` (`name`) COMMENT '确保实体名称唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储Rasa实体定义';

-- ----------------------------
-- 2. 对话流程相关表
-- ----------------------------

-- 故事表：存储Rasa对话流程定义
CREATE TABLE `story` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '故事ID，自增主键',
  `name` varchar(200) NOT NULL COMMENT '故事名称',
  `description` varchar(500) DEFAULT NULL COMMENT '故事描述',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_story_name` (`name`) COMMENT '确保故事名称唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储Rasa对话流程定义';

-- 故事步骤表：存储故事的具体步骤
CREATE TABLE `story_step` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '步骤ID，自增主键',
  `story_id` bigint NOT NULL COMMENT '关联的故事ID（代码控制关联）',
  `step_order` int NOT NULL COMMENT '步骤顺序',
  `step_type` varchar(20) NOT NULL COMMENT '步骤类型（intent/action等）',
  `content` text NOT NULL COMMENT '步骤内容，JSON格式',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_story_id` (`story_id`) COMMENT '故事ID索引，加速查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储故事的具体步骤';

-- ----------------------------
-- 3. 动作与响应相关表
-- ----------------------------

-- 自定义动作表：存储对接第三方API的自定义动作配置
CREATE TABLE `custom_action` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '动作ID，自增主键',
  `name` varchar(100) NOT NULL COMMENT '动作名称',
  `description` varchar(500) DEFAULT NULL COMMENT '动作描述',
  `http_method` varchar(10) NOT NULL COMMENT 'HTTP方法',
  `api_url` varchar(500) NOT NULL COMMENT 'API地址',
  `token` varchar(500) DEFAULT NULL COMMENT '鉴权Token',
  `headers` text COMMENT '请求头配置，JSON格式',
  `request_body` text COMMENT '请求体，JSON格式',
  `response_mapping` text COMMENT '响应映射规则，JSON格式',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_action_name` (`name`) COMMENT '确保动作名称唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储对接第三方API的自定义动作配置';

-- 响应模板表：存储Rasa响应模板
CREATE TABLE `response` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '响应ID，自增主键',
  `name` varchar(100) NOT NULL COMMENT '响应名称，如utter_greet',
  `description` varchar(500) DEFAULT NULL COMMENT '响应描述',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_response_name` (`name`) COMMENT '确保响应名称唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储Rasa响应模板';

-- 响应内容表：存储响应的具体内容
CREATE TABLE `response_content` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '响应内容ID，自增主键',
  `response_id` bigint NOT NULL COMMENT '关联的响应ID（代码控制关联）',
  `content_type` varchar(20) NOT NULL COMMENT '内容类型，如text、image',
  `text_content` varchar(2000) DEFAULT NULL COMMENT '文本内容',
  `media_url` varchar(500) DEFAULT NULL COMMENT '媒体URL',
  `content_order` int NOT NULL COMMENT '内容顺序',
  `created_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_response_id` (`response_id`) COMMENT '响应ID索引，加速查询'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储响应的具体内容';

-- ----------------------------
-- 4. 系统配置表
-- ----------------------------

-- 系统配置表：存储系统基础配置
CREATE TABLE `system_config` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '配置ID，自增主键',
  `config_key` varchar(100) NOT NULL COMMENT '配置键，如rasa_server_url',
  `config_value` varchar(500) NOT NULL COMMENT '配置值',
  `description` varchar(500) DEFAULT NULL COMMENT '配置描述',
  `updated_by` varchar(100) DEFAULT NULL COMMENT '更新人',
  `updated_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_config_key` (`config_key`) COMMENT '确保配置键唯一'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='存储系统配置信息';

-- ----------------------------
-- 示例数据插入
-- ----------------------------

-- 插入系统配置
INSERT INTO `system_config` (`config_key`, `config_value`, `description`, `updated_by`) VALUES
('rasa_server_url', 'http://localhost:5005', 'Rasa服务器地址', 'system'),
('rasa_actions_url', 'http://localhost:5055', 'Rasa动作服务器地址', 'system'),
('log_level', 'INFO', '系统日志级别', 'system'),
('api_timeout', '30', 'API请求超时时间(秒)', 'system');

-- 插入意图数据
INSERT INTO `intent` (`name`, `description`) VALUES
('greet', '用户打招呼或问候'),
('goodbye', '用户告别或结束对话'),
('query_bill', '用户查询账单信息'),
('query_balance', '用户查询账户余额'),
('complain', '用户投诉或反馈问题');

-- 插入意图样本数据
INSERT INTO `intent_example` (`intent_id`, `text`) VALUES
(1, '你好'),
(1, '早上好'),
(1, '嗨，在吗'),
(1, '您好，请问有人吗'),
(2, '再见'),
(2, '拜拜'),
(2, '下次见'),
(2, '退出对话'),
(3, '我的账单是多少'),
(3, '查询一下我的消费记录'),
(3, '看看我这个月花了多少钱'),
(3, '上个月的账单明细'),
(4, '我的账户还有多少余额'),
(4, '查询余额'),
(4, '我的卡里还有钱吗'),
(5, '我要投诉'),
(5, '这个服务太差了'),
(5, '我有问题要反馈');

-- 插入实体数据
INSERT INTO `entity` (`name`, `description`) VALUES
('account_number', '银行账号'),
('date', '日期'),
('amount', '金额'),
('product', '产品名称'),
('user_id', '用户ID'),
('complaint_type', '投诉类型');

-- 插入故事数据
INSERT INTO `story` (`name`, `description`) VALUES
('greet_and_respond', '问候与回应的对话流程'),
('bill_inquiry', '账单查询的对话流程'),
('balance_inquiry', '余额查询的对话流程');

-- 插入故事步骤数据
INSERT INTO `story_step` (`story_id`, `step_order`, `step_type`, `content`) VALUES
-- 问候对话流程
(1, 1, 'intent', '{"name": "greet"}'),
(1, 2, 'action', '{"name": "utter_greet"}'),
(1, 3, 'intent', '{"name": "goodbye"}'),
(1, 4, 'action', '{"name": "utter_goodbye"}'),

-- 账单查询流程
(2, 1, 'intent', '{"name": "query_bill"}'),
(2, 2, 'action', '{"name": "utter_ask_account_number"}'),
(2, 3, 'action', '{"name": "action_query_bill"}'),
(2, 4, 'action', '{"name": "utter_bill_result"}'),

-- 余额查询流程
(3, 1, 'intent', '{"name": "query_balance"}'),
(3, 2, 'action', '{"name": "utter_ask_account_number"}'),
(3, 3, 'action', '{"name": "action_query_balance"}'),
(3, 4, 'action', '{"name": "utter_balance_result"}');

-- 插入自定义动作数据
INSERT INTO `custom_action` (`name`, `description`, `http_method`, `api_url`, `token`, `headers`, `request_body`, `response_mapping`) VALUES
('action_query_bill', '查询账单信息', 'POST', 'https://api.example.com/bill/query', 'secret_token_123', '{"Content-Type": "application/json"}', '{"account": "{{account_number}}", "month": "{{bill_month}}"}', '{"total_amount": "data.total", "due_date": "data.due_date", "details": "data.details"}'),
('action_query_balance', '查询账户余额', 'GET', 'https://api.example.com/account/{{account_number}}/balance', 'secret_token_123', '{"Authorization": "Bearer {{token}}"}', NULL, '{"balance": "data.balance", "available": "data.available", "currency": "data.currency"}');

-- 插入响应模板数据
INSERT INTO `response` (`name`, `description`) VALUES
('utter_greet', '问候用户的响应'),
('utter_goodbye', '告别用户的响应'),
('utter_ask_account_number', '询问用户账号的响应'),
('utter_bill_result', '展示账单查询结果的响应'),
('utter_balance_result', '展示余额查询结果的响应');

-- 插入响应内容数据
INSERT INTO `response_content` (`response_id`, `content_type`, `text_content`, `media_url`, `content_order`) VALUES
-- 问候响应
(1, 'text', '你好！有什么可以帮助您的吗？', NULL, 1),
(1, 'text', '您好！很高兴为您服务。', NULL, 2),
(1, 'text', '欢迎咨询，我能为您做些什么？', NULL, 3),

-- 告别响应
(2, 'text', '再见！祝您生活愉快。', NULL, 1),
(2, 'text', '感谢您的咨询，再见！', NULL, 2),
(2, 'text', '有任何问题随时联系我们，再见！', NULL, 3),

-- 询问账号
(3, 'text', '请提供您的账号，以便我为您查询。', NULL, 1),
(3, 'text', '麻烦告诉我您的账号信息，我会尽快为您处理。', NULL, 2),

-- 账单结果
(4, 'text', '您{{bill_month}}的账单总金额为{{total_amount}}元，到期日为{{due_date}}。', NULL, 1),
(4, 'text', '查询到您的账单信息：总额{{total_amount}}元，需在{{due_date}}前支付。', NULL, 2),

-- 余额结果
(5, 'text', '您的账户当前余额为{{balance}}{{currency}}，可用余额{{available}}{{currency}}。', NULL, 1),
(5, 'text', '查询到您的账户余额：{{balance}}{{currency}}（可用：{{available}}{{currency}}）。', NULL, 2);
