import { Meta } from '@storybook/addon-docs';
import { Typography } from 'antd';
import UserChatMessage from '../components/chat/ChatUserMessage';
import { ChatMessage } from '../interfaces/chat-message.model';

<Meta title="Owncast/Documentation/Chat" />

<Typography.Title style={{color: 'var(--primary-color)'}}>Owncast Chat</Typography.Title>

The Owncast chat is a websocket service that is authenticated with an access token.

The chat user interface has a handful of different states.

# App states

## Offline (stream is not live)

- The entire chat UI is hidden.

## Online (stream is live)

- The chat interface is visible.

### Online + chat is disconnected

- Show a loading state within the chat component.
- Disable the text input box.

## Banned from chat

- The entire chat UI is hidden.


## Stream ended

- Chat is visible for the next 5 minutes to allow viewers to say goodbye.
- Also allows for chat to stay active in case the streamer wants to quickly
restart their stream or there's a network blip.

## Chat Disconnected

If chat server is not available (websocket disconnects/not available for some reason)
then the chat input box should become disabled and placeholder should say chat is not availble.

# Message types

## User chat message

The message that is displayed when a chat user sends a message.

## System message

A message sent from the server. Is commonly used for

- Welcome message.
- An external script or integration sending a message on behalf of the server.

## Action message

A message saying an action has taken place. Is commonly used for

- User joined.
- User was banned.
- User changed name.
- Stream is starting.
- Stream is ending.
- An external script or integration sending an action.

## Federated action message

A message stating that somebody on the Fediverse performed an action.
It is used for:

- User "liked" that the steam went live.
- User followed the instance.
- User shared the instance to their followers.