/*
 * Copyright (c) 2010-2026 Contributors to the openHAB project
 *
 * See the NOTICE file(s) distributed with this work for additional
 * information.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0
 *
 * SPDX-License-Identifier: EPL-2.0
 */
package org.openhab.binding.ntfy.internal.network;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
import org.openhab.binding.ntfy.internal.models.BaseEvent;

/**
 * Listener interface for WebSocket connection lifecycle and incoming messages.
 * Implementations receive events such as connection established, errors and
 * incoming parsed {@link org.openhab.binding.ntfy.internal.models.BaseEvent} instances.
 *
 * @author Christian Kittel - Initial contribution
 */
@NonNullByDefault
public interface WebSocketConnectionListener {

    /**
     * Connection successfully established.
     */
    void connectionEstablished();

    /**
     * Connection lost
     *
     * @param reason A reason for the disconnection
     */
    void connectionLost(@Nullable String reason);

    /**
     * Connection error
     *
     * @param cause The exception
     */
    void connectionError(Throwable cause);

    /**
     * Called when a parsed event message was received from the websocket.
     *
     * @param messageEvent the parsed {@link BaseEvent}
     */
    void messageReceived(BaseEvent messageEvent);
}
