using OmsorgCore.Domain.Entities;
using OmsorgCore.Domain.Enums;

namespace OmsorgCore.Application.Services;

public interface IRoleService
{
    Task<IReadOnlyList<Role>> GetAllAsync(CancellationToken cancellationToken = default);
    Task<CreateRoleResult> CreateAsync(string name, CancellationToken cancellationToken = default);

    /// <summary>Inklusive RolePermissions - für die Rechte-Matrix-Ansicht/-Bearbeitung einer Rolle.</summary>
    Task<Role?> GetByIdWithPermissionsAsync(Guid id, CancellationToken cancellationToken = default);

    /// <summary>Ersetzt die komplette RolePermission-Menge der Rolle durch die übergebene Menge (kein inkrementelles Patchen).</summary>
    Task<UpdateRolePermissionsResult> UpdatePermissionsAsync(
        Guid roleId,
        IReadOnlyList<(ModuleType Module, PermissionAction Action, PermissionScope Scope)> permissions,
        CancellationToken cancellationToken = default);

    /// <summary>Löschschutz: schlägt fehl, solange mindestens ein User dieser Rolle zugewiesen ist (analog ValueListService.DeleteItemAsync).</summary>
    Task<DeleteRoleResult> DeleteAsync(Guid id, CancellationToken cancellationToken = default);
}
