-- 平台租户内置角色 + 平台管理员账号（与 internal/iam/service 中租户初始化逻辑对齐）
-- 依赖：已执行 001_iam.sql、002_system.sql、003_seed_platform_tenant.sql
--
-- 默认管理员（平台租户 platform）：
--   用户名：admin
--   密码：Admin@123   （bcrypt DefaultCost，与 golang.org/x/crypto/bcrypt 一致）
--
-- 内置角色：
--   tenant_admin — 与 DefaultTenantAdminRoleCode 一致，data_scope=4（全部）
--   user         — 普通用户占位，data_scope=1（本人）

BEGIN;

-- 固定 UUID，便于排查与文档引用
-- platform_tenant_id = 00000000-0000-0000-0000-000000000001
-- root_dept_id       = 20000000-0000-4000-8000-000000000001
-- role_admin_id      = 20000000-0000-4000-8000-000000000002
-- role_user_id       = 20000000-0000-4000-8000-000000000006
-- admin_user_id      = 20000000-0000-4000-8000-000000000003

-- 1) 平台根部门（与 TenantService.Create 中根部门一致）
INSERT INTO iam_dept (
    id, tenant_id, parent_id, dept_name, dept_path, sort_order, status, created_at, updated_at
) VALUES (
    '20000000-0000-4000-8000-000000000001',
    '00000000-0000-0000-0000-000000000001',
    '',
    '平台',
    '/20000000-0000-4000-8000-000000000001/',
    0,
    1,
    now(),
    now()
)
ON CONFLICT (id) DO NOTHING;

-- 2) 内置角色：租户超级管理员（与新租户初始化角色编码一致）
INSERT INTO iam_role (
    id, tenant_id, role_code, role_name, data_scope, description, is_builtin, status, created_at, updated_at
) VALUES (
    '20000000-0000-4000-8000-000000000002',
    '00000000-0000-0000-0000-000000000001',
    'tenant_admin',
    '超级管理员',
    4,
    '内置：租户内全部数据权限（与 DefaultTenantAdminRoleCode 一致）',
    true,
    1,
    now(),
    now()
)
ON CONFLICT (id) DO NOTHING;

-- 3) 内置角色：普通用户（占位）
INSERT INTO iam_role (
    id, tenant_id, role_code, role_name, data_scope, description, is_builtin, status, created_at, updated_at
) VALUES (
    '20000000-0000-4000-8000-000000000006',
    '00000000-0000-0000-0000-000000000001',
    'user',
    '普通用户',
    1,
    '内置：本人数据范围（DataScopeSelf）',
    true,
    1,
    now(),
    now()
)
ON CONFLICT (id) DO NOTHING;

-- 4) 平台管理员用户（密码 Admin@123）
INSERT INTO iam_user (
    id, tenant_id, dept_id, user_name, real_name, password_hash, status, created_at, updated_at
) VALUES (
    '20000000-0000-4000-8000-000000000003',
    '00000000-0000-0000-0000-000000000001',
    '20000000-0000-4000-8000-000000000001',
    'admin',
    '平台管理员',
    '$2a$10$8p7lXpy9mr7hhnAiOA8pNOgAU128xIWFxrU90iqw.F4VSw77vDEYO',
    1,
    now(),
    now()
)
ON CONFLICT (id) DO NOTHING;

-- 5) 用户-部门（主部门）
INSERT INTO iam_user_dept (id, user_id, dept_id, is_primary, created_at)
VALUES (
    '20000000-0000-4000-8000-000000000004',
    '20000000-0000-4000-8000-000000000003',
    '20000000-0000-4000-8000-000000000001',
    true,
    now()
)
ON CONFLICT (id) DO NOTHING;

-- 6) 用户-角色（绑定 tenant_admin）
INSERT INTO iam_user_role (id, user_id, role_id, created_at)
VALUES (
    '20000000-0000-4000-8000-000000000005',
    '20000000-0000-4000-8000-000000000003',
    '20000000-0000-4000-8000-000000000002',
    now()
)
ON CONFLICT (id) DO NOTHING;

-- 7) 回写租户管理员
UPDATE iam_tenant
SET admin_user_id = '20000000-0000-4000-8000-000000000003'
WHERE id = '00000000-0000-0000-0000-000000000001';

-- 8) 将「超级管理员」与当前库中全部菜单关联（与 TenantService.Create 一致；无 iam_menu 数据时本步不插入行）
INSERT INTO iam_role_menu (id, role_id, menu_id, created_at)
SELECT gen_random_uuid()::text,
    '20000000-0000-4000-8000-000000000002',
    m.id,
    now()
FROM iam_menu m
ON CONFLICT (role_id, menu_id) DO NOTHING;

COMMIT;
