package permissions

import (
	"context"

	"github.com/nexuscrm/backend/pkg/errors"
	"github.com/nexuscrm/shared/pkg/models"
)

func (s *PermissionService) ListPermissionSetGroups(ctx context.Context) ([]models.PermissionSetGroup, error) {
	return s.repo.ListPermissionSetGroups(ctx)
}

func (s *PermissionService) GetPermissionSetGroup(ctx context.Context, id string) (*PermissionSetGroupWithComponents, error) {
	group, err := s.repo.GetPermissionSetGroupByID(ctx, id)
	if err != nil {
		return nil, errors.NewInternalError("failed to get permission set group", err)
	}
	if group == nil {
		return nil, nil
	}

	components, err := s.repo.GetPermissionSetGroupComponents(ctx, id)
	if err != nil {
		return nil, errors.NewInternalError("failed to get group components", err)
	}

	var refs []PermissionSetRef
	for _, c := range components {
		refs = append(refs, PermissionSetRef{
			ID:      c.ID,
			APIName: c.APIName,
			Label:   c.Label,
		})
	}

	return &PermissionSetGroupWithComponents{
		ID:             group.ID,
		APIName:        group.APIName,
		Label:          group.Label,
		Description:    group.Description,
		CreatedDate:    group.CreatedDate,
		PermissionSets: refs,
	}, nil
}

func (s *PermissionService) CreatePermissionSetGroup(ctx context.Context, group *models.PermissionSetGroup, permSetIDs []string) error {
	return s.repo.CreatePermissionSetGroup(ctx, group, permSetIDs)
}

func (s *PermissionService) UpdatePermissionSetGroup(ctx context.Context, group *models.PermissionSetGroup, permSetIDs []string) error {
	return s.repo.UpdatePermissionSetGroup(ctx, group, permSetIDs)
}

func (s *PermissionService) DeletePermissionSetGroup(ctx context.Context, id string) error {
	return s.repo.DeletePermissionSetGroup(ctx, id)
}
