// K8s Role Schema - 由 ConfTemplate 生成
// 生成时间: 自动生成

export const k8sRoleSchema = {
  id: 'k8s-role',
  name: 'K8s Role',
  icon: 'Shield',
  category: '云原生',
  description: 'Kubernetes 命名空间级 RBAC 角色',
  format: 'yaml',
  fileName: 'role.yaml',
  groups: [
    {
      title: '基础信息',
      fields: [
        {
          key: 'name',
          label: 'Role 名称',
          type: 'text',
          placeholder: 'my-role',
          default: 'my-role',
          required: true,
          tip: '将用作 Role 的 metadata.name',
        },
        {
          key: 'namespace',
          label: '命名空间',
          type: 'text',
          placeholder: 'default',
          default: 'default',
        },
      ],
    },
    {
      title: '权限规则',
      fields: [
        {
          key: 'resources',
          label: '资源类型',
          type: 'select',
          multiple: true,
          options: [
            { label: 'Pods', value: 'pods' },
            { label: 'Services', value: 'services' },
            { label: 'ConfigMaps', value: 'configmaps' },
            { label: 'Deployments', value: 'deployments' },
            { label: 'Secrets', value: 'secrets' },
            { label: 'All (*)', value: '*' },
          ],
          default: ['pods'],
          tip: '可多选，选择要授权的资源类型',
        },
        {
          key: 'verbs',
          label: '操作动词',
          type: 'select',
          multiple: true,
          options: [
            { label: 'Get (读取)', value: 'get' },
            { label: 'List (列表)', value: 'list' },
            { label: 'Watch (监听)', value: 'watch' },
            { label: 'Create (创建)', value: 'create' },
            { label: 'Update (更新)', value: 'update' },
            { label: 'Delete (删除)', value: 'delete' },
            { label: 'Patch (补丁)', value: 'patch' },
            { label: 'All (*)', value: '*' },
          ],
          default: ['get', 'list', 'watch'],
          tip: '可多选，选择允许的操作',
        },
        {
          key: 'apiGroups',
          label: 'API 组',
          type: 'text',
          placeholder: '"" (核心组留空)',
          default: '',
          tip: 'API 组，核心资源(如 pods, services)留空',
        },
      ],
    },
  ],
}

function toYaml(obj, indent = 0) {
  const lines = []
  const prefix = '  '.repeat(indent)

  for (const [key, value] of Object.entries(obj)) {
    if (value === null || value === undefined || value === '') continue

    if (Array.isArray(value)) {
      lines.push(`${prefix}${key}:`)
      for (const item of value) {
        if (typeof item === 'object' && item !== null) {
          const entries = Object.entries(item).filter(([, v]) => v !== null && v !== undefined && v !== '')
          if (entries.length === 0) continue
          const first = entries[0]
          lines.push(`${prefix}  - ${first[0]}: ${first[1]}`)
          for (let i = 1; i < entries.length; i++) {
            lines.push(`${prefix}    ${entries[i][0]}: ${entries[i][1]}`)
          }
        } else {
          lines.push(`${prefix}  - ${item}`)
        }
      }
    } else if (typeof value === 'object') {
      lines.push(`${prefix}${key}:`)
      lines.push(toYaml(value, indent + 1))
    } else {
      lines.push(`${prefix}${key}: ${value}`)
    }
  }

  return lines.join('\n')
}

export function generateK8sRoleYaml(config) {
  const resources = Array.isArray(config.resources) ? config.resources : [config.resources || 'pods']
  const verbs = Array.isArray(config.verbs) ? config.verbs : [config.verbs || 'get']
  const apiGroups = config.apiGroups !== undefined && config.apiGroups !== ''
    ? config.apiGroups.split(',').map(g => g.trim())
    : ['']

  const rule = {
    apiGroups,
    resources,
    verbs,
  }

  const role = {
    apiVersion: 'rbac.authorization.k8s.io/v1',
    kind: 'Role',
    metadata: {
      name: config.name,
      namespace: config.namespace,
    },
    rules: [rule],
  }

  const header = `# K8s Role - 由 ConfTemplate 生成
# 生成时间: ${new Date().toLocaleString('zh-CN')}
# 部署命令: kubectl apply -f ${config.fileName || 'role.yaml'}
`

  return header + '\n' + toYaml(role)
}
