package audit

import "time"

type AuditLogType string

const (
	AuditLogTypeChange                         AuditLogType = "change"
	AuditLogTypeCtl                            AuditLogType = "ctl"
	AuditLogTypeClusterMaintenance             AuditLogType = "cluster_maintenance"
	AuditLogTypeOperation                      AuditLogType = "operation"
	AuditLogTypeJump                           AuditLogType = "jump"
	AuditLogTypeCloudConfigChange              AuditLogType = "cloud_config_change"
	AuditLogTypeCloudConfigDefaultConfigChange AuditLogType = "cloud_config_default_config_change"
	AuditLogTypeK8sUpgradetask                 AuditLogType = "k8s_upgrade_task"
	AuditLogTypeTenant                         AuditLogType = "tenant"
	AuditLogTypeSpuSku                         AuditLogType = "spu_sku"
	AuditLogTypeRBACRole                       AuditLogType = "rbac_role"
	AuditLogTypeRBACRoleBinding                AuditLogType = "rbac_rolebinding"
	AuditLogTypeIAMRole                        AuditLogType = "iam_role"
	AuditLogTypeIAMRoleBinding                 AuditLogType = "iam_rolebinding"
	AuditLogTypeIAMPolicy                      AuditLogType = "iam_policy"
	AuditLogTypeIAMPolicyBinding               AuditLogType = "iam_policybinding"
	AuditLogTypeIAMAPIKey                      AuditLogType = "iam_apikey"
)

var (
	AuditLogTypeValues = []AuditLogType{
		AuditLogTypeChange,
		AuditLogTypeCtl,
		AuditLogTypeClusterMaintenance,
		AuditLogTypeOperation,
		AuditLogTypeJump,
		AuditLogTypeCloudConfigChange,
		AuditLogTypeCloudConfigDefaultConfigChange,
		AuditLogTypeK8sUpgradetask,
		AuditLogTypeTenant,
		AuditLogTypeSpuSku,
		AuditLogTypeRBACRole,
		AuditLogTypeRBACRoleBinding,
		AuditLogTypeIAMRole,
		AuditLogTypeIAMRoleBinding,
		AuditLogTypeIAMPolicy,
		AuditLogTypeIAMPolicyBinding,
		AuditLogTypeIAMAPIKey,
	}
)

type AuditLog struct {
	ID uint64 `json:"id"`

	Type      AuditLogType `json:"type"`
	ObjectID  string       `json:"object_id"`
	Operator  string       `json:"operator"`
	Operation string       `json:"operation"`
	OperateAt *time.Time   `json:"operate_at"`
	Details   []byte       `json:"details"`
} // @name audit.AuditLog
