package echo_go

import (
	"fmt"
	"net"
)

type MessageType string

const (
	ReqServerInfo    MessageType = "serverInfoRequest"
	ReqClientSecret              = "clientSecret"
	ReqConnection                = "connectionRequest"
	ReqDisconnect                = "disconnect"
	ReqInfo                      = "requestInfo"
	ReqUserMessage               = "userMessage"
	ReqChangeChannel             = "changeChannel"
	ReqHistory                   = "historyRequest"
	ReqLeaveChannel              = "leaveChannel"

	ResServerInfo           = "serverInfo"
	ResClientSecret         = "gotSecret"
	ResConnectionAccepted   = "CRAccepted"
	ResConnectionDenied     = "CRDenied"
	ResOutboundMessage      = "outboundMessage"
	ResConnectionTerminated = "connectionTerminated"
	ResChannelUpdate        = "channelUpdate"
	ResCommandData          = "commandData"
	ResChannelHistory       = "channelHistory"
	ResErrorOccurred        = "errorOccured"
	ResAdditionalHistory    = "additionalHistory"
)

type Client struct {
	Con        net.Conn
	UserId     string
	SessionKey string
	Username   string
}

type RawMessage struct {
	UserId      string      `json:"userid"`
	MessageType MessageType `json:"messagetype"`
	SubType     *string     `json:"subtype"`
	Data        *string     `json:"data"`
	Metadata    string      `json:"metadata"`
}

func (m *RawMessage) String() string {
	return fmt.Sprintf("\n"+
		"  UserId: %v\n"+
		"  Type: %v - %v\n"+
		"  Data: %v\n"+
		"  Metadata: %v", m.UserId, m.MessageType, *m.SubType, *m.Data, m.Metadata)
}