package converter

import (
	"fmt"

	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/acl"
	nativeschema "git.frostfs.info/TrueCloudLab/policy-engine/schema/native"
)

func SchemaRoleFromACLRole(role acl.Role) (string, error) {
	switch role {
	case acl.RoleOwner:
		return nativeschema.PropertyValueContainerRoleOwner, nil
	case acl.RoleContainer:
		return nativeschema.PropertyValueContainerRoleContainer, nil
	case acl.RoleInnerRing:
		return nativeschema.PropertyValueContainerRoleIR, nil
	case acl.RoleOthers:
		return nativeschema.PropertyValueContainerRoleOthers, nil
	default:
		return "", fmt.Errorf("failed to convert %s", role.String())
	}
}

func SchemaMethodFromACLOperation(op acl.Op) (string, error) {
	switch op {
	case acl.OpObjectGet:
		return nativeschema.MethodGetObject, nil
	case acl.OpObjectHead:
		return nativeschema.MethodHeadObject, nil
	case acl.OpObjectPut:
		return nativeschema.MethodPutObject, nil
	case acl.OpObjectDelete:
		return nativeschema.MethodDeleteObject, nil
	case acl.OpObjectSearch:
		return nativeschema.MethodSearchObject, nil
	case acl.OpObjectRange:
		return nativeschema.MethodRangeObject, nil
	case acl.OpObjectHash:
		return nativeschema.MethodHashObject, nil
	default:
		return "", fmt.Errorf("operation cannot be converted: %d", op)
	}
}