package authx

// 权限统一用中文命名。英文旧码仍可通过 NormalizePerm 兼容。
const (
	Perm读取模块 = "读取模块"
	Perm写入模块 = "写入模块"
	Perm发布模块 = "发布模块"
	Perm新增数据 = "新增数据"
	Perm查询数据 = "查询数据"
	Perm更新数据 = "更新数据"
	Perm删除数据 = "删除数据"
	Perm导出数据 = "导出数据"
	Perm导入数据 = "导入数据"
	Perm查看审计 = "查看审计"
	Perm上传文件 = "上传文件"
	Perm下载文件 = "下载文件"
	Perm管理智能体 = "管理智能体"
	Perm邀请成员 = "邀请成员"
	Perm管理组织 = "管理组织"
	Perm数据同步 = "数据同步"
	Perm管理租户 = "管理租户" // 平台超级管理员：跨公司
)

// permAlias：英文旧码 → 中文规范名；中文自身映射到自身。
var permAlias = map[string]string{
	"app.read":       Perm读取模块,
	"app.write":      Perm写入模块,
	"app.admin":      Perm发布模块,
	"row.create":     Perm新增数据,
	"row.read":       Perm查询数据,
	"row.update":     Perm更新数据,
	"row.delete":     Perm删除数据,
	"row.export":     Perm导出数据,
	"row.import":     Perm导入数据,
	"audit.read":     Perm查看审计,
	"storage.write":  Perm上传文件,
	"storage.read":   Perm下载文件,
	"agent.admin":    Perm管理智能体,
	"tenant.invite":  Perm邀请成员,
	"org.admin":      Perm管理组织,
	"sync.admin":     Perm数据同步,
	"sync.push":      Perm数据同步,
	"tenant.admin":   Perm管理租户,
	Perm读取模块:       Perm读取模块,
	Perm写入模块:       Perm写入模块,
	Perm发布模块:       Perm发布模块,
	Perm新增数据:       Perm新增数据,
	Perm查询数据:       Perm查询数据,
	Perm更新数据:       Perm更新数据,
	Perm删除数据:       Perm删除数据,
	Perm导出数据:       Perm导出数据,
	Perm导入数据:       Perm导入数据,
	Perm查看审计:       Perm查看审计,
	Perm上传文件:       Perm上传文件,
	Perm下载文件:       Perm下载文件,
	Perm管理智能体:     Perm管理智能体,
	Perm邀请成员:       Perm邀请成员,
	Perm管理组织:       Perm管理组织,
	Perm数据同步:       Perm数据同步,
	Perm管理租户:       Perm管理租户,
}

// NormalizePerm 将权限统一为中文规范名（未知则原样返回）。
func NormalizePerm(p string) string {
	if c, ok := permAlias[p]; ok {
		return c
	}
	return p
}

// NormalizePerms 去重并转为中文规范名。
func NormalizePerms(perms []string) []string {
	seen := map[string]struct{}{}
	out := make([]string, 0, len(perms))
	for _, p := range perms {
		c := NormalizePerm(p)
		if c == "" {
			continue
		}
		if _, ok := seen[c]; ok {
			continue
		}
		seen[c] = struct{}{}
		out = append(out, c)
	}
	return out
}
