<?php

declare(strict_types=1);

namespace App\Framework\Http;

/**
 * Interface for WebSocket connections
 *
 * Allows for testable implementations and dependency injection
 */
interface WebSocketConnectionInterface
{
    /**
     * Get connection unique identifier
     */
    public function getId(): string;

    /**
     * Send text message
     */
    public function send(string $message): bool;

    /**
     * Send JSON data
     */
    public function sendJson(array $data): bool;

    /**
     * Send binary data
     */
    public function sendBinary(string $data): bool;

    /**
     * Send ping frame
     */
    public function ping(string $data = ''): bool;

    /**
     * Close connection
     */
    public function close(int $code = 1000, string $reason = ''): void;

    /**
     * Check if connection is active
     */
    public function isConnected(): bool;

    /**
     * Set connection attribute
     */
    public function setAttribute(string $key, mixed $value): void;

    /**
     * Get connection attribute
     */
    public function getAttribute(string $key, mixed $default = null): mixed;
}
