package repository

import (
	"context"

	"gateway/internal/model/permission/domain/entity"
	"gateway/internal/model/permission/domain/enum"
)

// PermissionRepository persists the platform-wide Permission catalog.
//
// Catalog mutations are platform admin only; tenants read via
// GetAll / GetByID. Insert is idempotent on Name (use UpsertByName when
// seeding).
type PermissionRepository interface {
	Insert(ctx context.Context, perm *entity.Permission) error
	UpsertByName(ctx context.Context, perm *entity.Permission) error
	UpdateStatus(ctx context.Context, id string, status enum.Status) error
	GetByID(ctx context.Context, id string) (*entity.Permission, error)
	GetByName(ctx context.Context, name string) (*entity.Permission, error)
	GetAll(ctx context.Context, status *enum.Status) ([]*entity.Permission, error)
	GetByIDs(ctx context.Context, ids []string) ([]*entity.Permission, error)
	GetByNames(ctx context.Context, names []string) ([]*entity.Permission, error)
}
