package repositories_astrologer

import (
	dto "astrology-api/dto_astrologer/activity"
	models "astrology-api/models/astrologermodel"
)

//////////////////////////////////////////////////////////////
// Activity Repository Interface
//////////////////////////////////////////////////////////////

type ActivityRepository interface {

	//----------------------------------------------------------
	// WAIT LIST
	//----------------------------------------------------------

	AddWaiting(waiting *models.AstrologerWaitingQueue) error

	UpdateWaiting(waiting *models.AstrologerWaitingQueue) error

	DeleteWaiting(queueID uint) error

	GetWaitingByID(queueID uint) (*models.AstrologerWaitingQueue, error)

	GetWaitingByUser(astrologerID uint, userID uint, waitingType string) (*models.AstrologerWaitingQueue, error)

	GetWaitingList(astrologerID uint, request dto.PaginationRequest) ([]dto.WaitingUserResponse, int64, error)

	UpdateQueuePositions(astrologerID uint, waitingType string) error

	GetNextWaitingUser(astrologerID uint, waitingType string) (*models.AstrologerWaitingQueue, error)

	//----------------------------------------------------------
	// CHAT HISTORY
	//----------------------------------------------------------

	GetChatHistory(astrologerID uint, request dto.PaginationRequest) ([]dto.ChatHistoryItem, int64, error)

	GetChatDetail(astrologerID uint, chatID uint) (*dto.ChatDetailResponse, error)

	//----------------------------------------------------------
	// CALL HISTORY
	//----------------------------------------------------------

	GetCallHistory(astrologerID uint, request dto.PaginationRequest) ([]dto.CallHistoryItem, int64, error)

	GetCallDetail(astrologerID uint, callID uint) (*dto.CallDetailResponse, error)

	//----------------------------------------------------------
	// ASTROMALL
	//----------------------------------------------------------

	GetAstromallOrders(astrologerID uint, request dto.PaginationRequest) ([]dto.AstromallOrderItem, int64, error)

	GetAstromallOrderDetail(astrologerID uint, orderID uint) (*dto.AstromallOrderItem, error)
}
