package com.social.media.domain.user.valueobject;

import java.util.Map;

/**
 * Value Object representing user permissions
 */
public record UserPermissions(Map<String, Object> permissions) {
    
    public UserPermissions {
        permissions = permissions != null ? Map.copyOf(permissions) : Map.of();
    }
    
    public static UserPermissions empty() {
        return new UserPermissions(Map.of());
    }
    
    public boolean hasPermission(String permission) {
        return permissions.containsKey(permission) && 
               Boolean.TRUE.equals(permissions.get(permission));
    }
    
    public Object getPermissionValue(String permission) {
        return permissions.get(permission);
    }
    
    public UserPermissions withPermission(String permission, Object value) {
        Map<String, Object> newPermissions = Map.copyOf(permissions);
        newPermissions.put(permission, value);
        return new UserPermissions(newPermissions);
    }
    
    public UserPermissions withoutPermission(String permission) {
        Map<String, Object> newPermissions = Map.copyOf(permissions);
        newPermissions.remove(permission);
        return new UserPermissions(newPermissions);
    }
    
    public boolean isEmpty() {
        return permissions.isEmpty();
    }
    
    public int size() {
        return permissions.size();
    }
}
