class BlockService { constructor(storageService) { this.storage = storageService; this.blockedUsers = new Set(); this.onBlockChange = null; } init() { const blocked = this.storage.getBlockedUsers(); this.blockedUsers = new Set(blocked.map(u => u.toLowerCase())); } isBlocked(username) { if (!username) return false; return this.blockedUsers.has(username.toLowerCase()); } block(username) { if (!username) return false; const normalized = username.toLowerCase(); if (this.blockedUsers.has(normalized)) return false; this.blockedUsers.add(normalized); this.save(); this.notifyChange(); return true; } unblock(username) { if (!username) return false; const normalized = username.toLowerCase(); if (!this.blockedUsers.has(normalized)) return false; this.blockedUsers.delete(normalized); this.save(); this.notifyChange(); return true; } toggle(username) { if (this.isBlocked(username)) { return this.unblock(username); } return this.block(username); } getBlockedUsers() { return Array.from(this.blockedUsers).sort(); } getBlockedCount() { return this.blockedUsers.size; } clear() { this.blockedUsers.clear(); this.save(); this.notifyChange(); } save() { this.storage.setBlockedUsers(Array.from(this.blockedUsers)); } notifyChange() { if (this.onBlockChange) { this.onBlockChange(this.getBlockedUsers()); } window.dispatchEvent(new CustomEvent('rantii:block-change', { detail: { blockedUsers: this.getBlockedUsers() } })); } setBlockChangeCallback(callback) { this.onBlockChange = callback; } filterRants(rants) { if (!rants || !Array.isArray(rants)) return []; return rants.filter(rant => !this.isBlocked(rant.user_username)); } filterComments(comments) { if (!comments || !Array.isArray(comments)) return []; return comments.filter(comment => !this.isBlocked(comment.user_username)); } filterNotifications(notifications) { if (!notifications || !Array.isArray(notifications)) return []; return notifications.filter(notif => { const username = notif.username?.name || notif.user_username?.name || notif.name; return !this.isBlocked(username); }); } } export { BlockService };