package service

import (
	"context"

	"kra/internal/biz"
)

type AccessControlService struct{ uc *biz.AccessControlUsecase }

func NewAccessControlService(uc *biz.AccessControlUsecase) *AccessControlService {
	return &AccessControlService{uc: uc}
}

func (s *AccessControlService) Authorize(ctx context.Context, authorityID uint, path, method string) (bool, error) {
	return s.uc.Authorize(ctx, authorityID, path, method)
}

func (s *AccessControlService) ResolveDataScope(ctx context.Context, authorityID, userID uint) (biz.DataScope, error) {
	return s.uc.ResolveDataScope(ctx, authorityID, userID)
}

func (s *AccessControlService) ContextWithDataScope(ctx context.Context, authorityID, userID uint) (context.Context, error) {
	scope, err := s.ResolveDataScope(ctx, authorityID, userID)
	if err != nil {
		return ctx, err
	}
	return biz.NewDataScopeContext(ctx, scope), nil
}
