-- 初始化权限相关基础数据（与 sys schema 对应）
-- 包含：部门、角色、模块、权限、视图及其关联关系

-- =============================
-- 1. 初始化根部门
-- =============================
INSERT INTO sys.tb_sys_dept (
  optsn, dept_id, name, parent_id, dept_path, description, 
  creator, create_time, deleted
) VALUES
('DEPT-0001', 'dept_root', '根部门', NULL, '/dept_root/', '系统根部门', 
 'system', now(), false);

-- =============================
-- 2. 初始化全局角色
-- =============================
INSERT INTO sys.tb_sys_role (
  optsn, role_id, name, description, scope, owner_dept_id, 
  status, creator, dept_path, create_time, deleted
) VALUES
-- 超级管理员（全局）
('ROLE-0001', 'role_super_admin', '超级管理员', '拥有系统所有权限的最高管理员', 
 'global', NULL, true, 'system', NULL, now(), false),

-- 系统管理员（全局）
('ROLE-0002', 'role_system_admin', '系统管理员', '负责系统配置和用户管理', 
 'global', NULL, true, 'system', NULL, now(), false),

-- 普通用户（全局）
('ROLE-0003', 'role_user', '普通用户', '系统普通用户角色', 
 'global', NULL, true, 'system', NULL, now(), false),

-- 访客（全局）
('ROLE-0004', 'role_guest', '访客', '系统访客角色，仅限查看基础信息', 
 'global', NULL, true, 'system', NULL, now(), false);

-- =============================
-- 3. 初始化系统模块
-- =============================
INSERT INTO sys.tb_sys_module (
  optsn, module_id, name, description, 
  creator, dept_path, create_time, deleted
) VALUES
('MODULE-0001', 'module_system', '系统管理', '用户、角色、权限、部门管理', 
 'system', NULL, now(), false),

('MODULE-0002', 'module_file', '文件管理', '文件上传、下载、关联管理', 
 'system', NULL, now(), false),

('MODULE-0003', 'module_message', '消息通知', '消息发送、接收、模板管理', 
 'system', NULL, now(), false),

('MODULE-0004', 'module_config', '配置管理', '系统配置参数管理', 
 'system', NULL, now(), false),

('MODULE-0005', 'module_knowledge', '知识库', '知识文档管理', 
 'system', NULL, now(), false),

('MODULE-0006', 'module_bidding', '招投标', '招投标业务管理', 
 'system', NULL, now(), false),

('MODULE-0007', 'module_customer_service', '智能客服', '客服工单管理', 
 'system', NULL, now(), false);

-- =============================
-- 4. 初始化系统权限
-- =============================
INSERT INTO sys.tb_sys_permission (
  optsn, permission_id, name, code, description, module_id, 
  status, creator, dept_path, create_time, deleted
) VALUES
-- 系统管理模块权限
('PERM-0001', 'perm_user_view', '用户查看', 'system:user:view', '查看用户列表和详情', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0002', 'perm_user_create', '用户创建', 'system:user:create', '创建新用户', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0003', 'perm_user_edit', '用户编辑', 'system:user:edit', '编辑用户信息', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0004', 'perm_user_delete', '用户删除', 'system:user:delete', '删除用户', 'module_system', 
 true, 'system', NULL, now(), false),

('PERM-0011', 'perm_role_view', '角色查看', 'system:role:view', '查看角色列表和详情', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0012', 'perm_role_create', '角色创建', 'system:role:create', '创建新角色', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0013', 'perm_role_edit', '角色编辑', 'system:role:edit', '编辑角色信息', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0014', 'perm_role_delete', '角色删除', 'system:role:delete', '删除角色', 'module_system', 
 true, 'system', NULL, now(), false),

('PERM-0021', 'perm_dept_view', '部门查看', 'system:dept:view', '查看部门列表和详情', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0022', 'perm_dept_create', '部门创建', 'system:dept:create', '创建新部门', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0023', 'perm_dept_edit', '部门编辑', 'system:dept:edit', '编辑部门信息', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0024', 'perm_dept_delete', '部门删除', 'system:dept:delete', '删除部门', 'module_system', 
 true, 'system', NULL, now(), false),

('PERM-0031', 'perm_permission_view', '权限查看', 'system:permission:view', '查看权限列表', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0032', 'perm_permission_manage', '权限管理', 'system:permission:manage', '管理权限配置', 'module_system', 
 true, 'system', NULL, now(), false),

-- 系统管理模块导出权限
('PERM-0041', 'perm_user_export', '用户导出', 'system:user:export', '导出用户数据', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0042', 'perm_role_export', '角色导出', 'system:role:export', '导出角色数据', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0043', 'perm_dept_export', '部门导出', 'system:dept:export', '导出部门数据', 'module_system', 
 true, 'system', NULL, now(), false),

-- 文件管理模块权限
('PERM-0101', 'perm_file_view', '文件查看', 'file:file:view', '查看文件列表', 'module_file', 
 true, 'system', NULL, now(), false),
('PERM-0102', 'perm_file_upload', '文件上传', 'file:file:upload', '上传文件', 'module_file', 
 true, 'system', NULL, now(), false),
('PERM-0103', 'perm_file_download', '文件下载', 'file:file:download', '下载文件', 'module_file', 
 true, 'system', NULL, now(), false),
('PERM-0104', 'perm_file_delete', '文件删除', 'file:file:delete', '删除文件', 'module_file', 
 true, 'system', NULL, now(), false),
('PERM-0105', 'perm_file_export', '文件导出', 'file:file:export', '导出文件列表数据', 'module_file', 
 true, 'system', NULL, now(), false),

-- 消息通知模块权限
('PERM-0201', 'perm_message_view', '消息查看', 'message:message:view', '查看消息列表', 'module_message', 
 true, 'system', NULL, now(), false),
('PERM-0202', 'perm_message_send', '消息发送', 'message:message:send', '发送消息通知', 'module_message', 
 true, 'system', NULL, now(), false),
('PERM-0203', 'perm_message_manage', '消息管理', 'message:message:manage', '管理消息模板和配置', 'module_message', 
 true, 'system', NULL, now(), false),
('PERM-0204', 'perm_message_export', '消息导出', 'message:message:export', '导出消息数据', 'module_message', 
 true, 'system', NULL, now(), false),

-- 配置管理模块权限
('PERM-0301', 'perm_config_view', '配置查看', 'config:config:view', '查看系统配置', 'module_config', 
 true, 'system', NULL, now(), false),
('PERM-0302', 'perm_config_edit', '配置编辑', 'config:config:edit', '修改系统配置', 'module_config', 
 true, 'system', NULL, now(), false),
('PERM-0303', 'perm_config_export', '配置导出', 'config:config:export', '导出系统配置数据', 'module_config', 
 true, 'system', NULL, now(), false),

-- 日志模块权限
('PERM-0401', 'perm_log_view', '日志查看', 'log:log:view', '查看系统日志', 'module_system', 
 true, 'system', NULL, now(), false),
('PERM-0402', 'perm_log_export', '日志导出', 'log:log:export', '导出系统日志数据', 'module_system', 
 true, 'system', NULL, now(), false);

-- =============================
-- 5. 初始化视图（菜单）
-- =============================
INSERT INTO sys.tb_sys_view (
  optsn, view_id, name, parent_id, url, component, icon, type, 
  layout, order_num, description, creator, create_time, deleted
) VALUES
-- 一级菜单
('VIEW-0001', 'view_system', '系统管理', NULL, '/system', NULL, 'Settings', 0, 
 'MainLayout', 100, '系统管理菜单', 'system', now(), false),

('VIEW-0002', 'view_business', '业务管理', NULL, '/business', NULL, 'Briefcase', 0, 
 'MainLayout', 200, '业务管理菜单', 'system', now(), false),

-- 系统管理子菜单
('VIEW-0101', 'view_user', '用户管理', 'view_system', '/system/user', 'system/UserList', 'Users', 1, 
 'MainLayout', 10, '用户管理页面', 'system', now(), false),

('VIEW-0102', 'view_role', '角色管理', 'view_system', '/system/role', 'system/RoleList', 'Shield', 1, 
 'MainLayout', 20, '角色管理页面', 'system', now(), false),

('VIEW-0103', 'view_dept', '部门管理', 'view_system', '/system/dept', 'system/DeptList', 'Building', 1, 
 'MainLayout', 30, '部门管理页面', 'system', now(), false),

('VIEW-0104', 'view_permission', '权限管理', 'view_system', '/system/permission', 'system/PermissionList', 'Lock', 1, 
 'MainLayout', 40, '权限管理页面', 'system', now(), false),

('VIEW-0105', 'view_config', '配置管理', 'view_system', '/system/config', 'system/ConfigList', 'Settings', 1, 
 'MainLayout', 50, '配置管理页面', 'system', now(), false),

('VIEW-0106', 'view_file', '文件管理', 'view_system', '/system/file', 'system/FileList', 'FileText', 1, 
 'MainLayout', 60, '文件管理页面', 'system', now(), false),

('VIEW-0107', 'view_message', '消息管理', 'view_system', '/system/message', 'system/MessageList', 'Mail', 1, 
 'MainLayout', 70, '消息管理页面', 'system', now(), false);

-- =============================
-- 6. 角色权限关联（超级管理员拥有所有权限）
-- =============================
INSERT INTO sys.tb_sys_role_permission (
  optsn, role_id, permission_id, creator, dept_path, create_time, deleted
)
SELECT 
  'RP-' || LPAD(ROW_NUMBER() OVER (ORDER BY permission_id)::TEXT, 4, '0'),
  'role_super_admin',
  permission_id,
  'system',
  NULL,
  now(),
  false
FROM sys.tb_sys_permission
WHERE deleted = false;

-- 系统管理员权限（除了用户删除外的系统管理权限）
INSERT INTO sys.tb_sys_role_permission (
  optsn, role_id, permission_id, creator, dept_path, create_time, deleted
)
SELECT 
  'RP-SA-' || LPAD(ROW_NUMBER() OVER (ORDER BY permission_id)::TEXT, 4, '0'),
  'role_system_admin',
  permission_id,
  'system',
  NULL,
  now(),
  false
FROM sys.tb_sys_permission
WHERE deleted = false 
  AND code NOT IN ('system:user:delete', 'system:role:delete', 'system:dept:delete')
  AND module_id IN ('module_system', 'module_file', 'module_message', 'module_config');

-- 普通用户权限（基础查看和文件操作）
INSERT INTO sys.tb_sys_role_permission (
  optsn, role_id, permission_id, creator, dept_path, create_time, deleted
) VALUES
('RP-U-0001', 'role_user', 'perm_user_view', 'system', NULL, now(), false),
('RP-U-0002', 'role_user', 'perm_file_view', 'system', NULL, now(), false),
('RP-U-0003', 'role_user', 'perm_file_upload', 'system', NULL, now(), false),
('RP-U-0004', 'role_user', 'perm_file_download', 'system', NULL, now(), false),
('RP-U-0005', 'role_user', 'perm_message_view', 'system', NULL, now(), false),
('RP-U-0006', 'role_user', 'perm_config_view', 'system', NULL, now(), false);

-- 访客权限（仅查看）
INSERT INTO sys.tb_sys_role_permission (
  optsn, role_id, permission_id, creator, dept_path, create_time, deleted
) VALUES
('RP-G-0001', 'role_guest', 'perm_user_view', 'system', NULL, now(), false),
('RP-G-0002', 'role_guest', 'perm_file_view', 'system', NULL, now(), false),
('RP-G-0003', 'role_guest', 'perm_message_view', 'system', NULL, now(), false);

-- =============================
-- 7. 视图权限关联
-- =============================
-- 将视图与对应模块的权限关联
INSERT INTO sys.tb_sys_view_permission (
  optsn, view_id, permission_id, creator, dept_path, create_time, deleted
) VALUES
-- 用户管理视图关联用户权限
('VP-0001', 'view_user', 'perm_user_view', 'system', NULL, now(), false),
('VP-0002', 'view_user', 'perm_user_create', 'system', NULL, now(), false),
('VP-0003', 'view_user', 'perm_user_edit', 'system', NULL, now(), false),
('VP-0004', 'view_user', 'perm_user_delete', 'system', NULL, now(), false),
('VP-0005', 'view_user', 'perm_user_export', 'system', NULL, now(), false),

-- 角色管理视图关联角色权限
('VP-0011', 'view_role', 'perm_role_view', 'system', NULL, now(), false),
('VP-0012', 'view_role', 'perm_role_create', 'system', NULL, now(), false),
('VP-0013', 'view_role', 'perm_role_edit', 'system', NULL, now(), false),
('VP-0014', 'view_role', 'perm_role_delete', 'system', NULL, now(), false),
('VP-0015', 'view_role', 'perm_role_export', 'system', NULL, now(), false),

-- 部门管理视图关联部门权限
('VP-0021', 'view_dept', 'perm_dept_view', 'system', NULL, now(), false),
('VP-0022', 'view_dept', 'perm_dept_create', 'system', NULL, now(), false),
('VP-0023', 'view_dept', 'perm_dept_edit', 'system', NULL, now(), false),
('VP-0024', 'view_dept', 'perm_dept_delete', 'system', NULL, now(), false),
('VP-0025', 'view_dept', 'perm_dept_export', 'system', NULL, now(), false),

-- 权限管理视图关联权限管理权限
('VP-0031', 'view_permission', 'perm_permission_view', 'system', NULL, now(), false),
('VP-0032', 'view_permission', 'perm_permission_manage', 'system', NULL, now(), false),

-- 配置管理视图关联配置权限
('VP-0041', 'view_config', 'perm_config_view', 'system', NULL, now(), false),
('VP-0042', 'view_config', 'perm_config_edit', 'system', NULL, now(), false),
('VP-0043', 'view_config', 'perm_config_export', 'system', NULL, now(), false),

-- 文件管理视图关联文件权限
('VP-0051', 'view_file', 'perm_file_view', 'system', NULL, now(), false),
('VP-0052', 'view_file', 'perm_file_upload', 'system', NULL, now(), false),
('VP-0053', 'view_file', 'perm_file_download', 'system', NULL, now(), false),
('VP-0054', 'view_file', 'perm_file_delete', 'system', NULL, now(), false),
('VP-0055', 'view_file', 'perm_file_export', 'system', NULL, now(), false),

-- 消息管理视图关联消息权限
('VP-0061', 'view_message', 'perm_message_view', 'system', NULL, now(), false),
('VP-0062', 'view_message', 'perm_message_send', 'system', NULL, now(), false),
('VP-0063', 'view_message', 'perm_message_manage', 'system', NULL, now(), false),
('VP-0064', 'view_message', 'perm_message_export', 'system', NULL, now(), false);
