syntax = "v1"

import "common.api"

type (
	SessionIdReq {
		Id int64 `path:"id"`
	}
	CreateGroupReq {
		Name         string  `json:"name"`
		Participants []int64 `json:"participants,optional"`
	}
	CreateDMReq {
		TargetId int64 `json:"targetId"`
	}
	ChatSession {
		Id            int64   `json:"id"`
		Type          string  `json:"type"`
		Name          string  `json:"name"`
		CreatorId     int64   `json:"creatorId"`
		Participants  []int64 `json:"participants"`
		LastMessage   string  `json:"lastMessage"`
		LastMessageAt int64   `json:"lastMessageAt"`
		CreatedAt     int64   `json:"createdAt"`
	}
	ChatSessionListResp {
		Items []ChatSession `json:"items"`
	}
	ChatMessage {
		Id        int64  `json:"id"`
		SessionId int64  `json:"sessionId"`
		SenderId  int64  `json:"senderId"`
		Type      string `json:"type"`
		Content   string `json:"content"`
		CreatedAt int64  `json:"createdAt"`
	}
	ChatMessageListResp {
		Items []ChatMessage `json:"items"`
	}
	ListMessageReq {
		SessionIdReq
		PageReq
	}
)

@server (
	prefix: api/v1/chat
	group:  chat
)
service chat-api {
	@doc "create group session"
	@handler CreateGroup
	post /sessions/group (CreateGroupReq) returns (ChatSession)

	@doc "create dm session"
	@handler CreateDM
	post /sessions/dm (CreateDMReq) returns (ChatSession)

	@doc "list user sessions"
	@handler ListSessions
	get /sessions (PageReq) returns (ChatSessionListResp)

	@doc "get session detail"
	@handler GetSession
	get /sessions/:id (SessionIdReq) returns (ChatSession)

	@doc "get message history"
	@handler ListMessages
	get /sessions/:id/messages (ListMessageReq) returns (ChatMessageListResp)
}
