package repositories_astrologer

import (
	models "astrology-api/models/astrologermodel"
)

type DashboardRepository interface {

	// Astrologer
	GetAstrologerByUserID(userID uint) (*models.Astrologer, error)

	// Status
	GetStatus(astrologerID uint) (*models.AstrologerStatus, error)

	// Today's Statistics
	GetTodayStatistics(astrologerID uint) (*models.AstrologerDailyStatistics, error)
	CreateTodayStatistics(stat *models.AstrologerDailyStatistics) error
	UpdateTodayStatistics(stat *models.AstrologerDailyStatistics) error

	// Wallet
	GetWalletBalance(userID uint) (float64, error)

	// Dashboard
	GetDashboard(userID uint) (*DashboardData, error)

	// CountPendingRequests is how many customers are ringing this astrologer
	// right now, for the Request Queue badge on the dashboard. Rows past the
	// ring timeout are excluded, so the badge never counts a request that can
	// no longer be accepted.
	CountPendingRequests(astrologerID uint, ringTimeoutSeconds int) (int64, error)

	CreateStatus(status *models.AstrologerStatus) error

	UpdateStatus(status *models.AstrologerStatus) error

	UpdateOnlineStatus(astrologerID uint, online bool) error

	UpdateChatStatus(astrologerID uint, online bool) error

	UpdateCallStatus(astrologerID uint, online bool) error

	UpdateQuickDND(astrologerID uint, enabled bool) error

	GetOffer(astrologerID uint) (*models.AstrologerOfferSetting, error)

	CreateOffer(offer *models.AstrologerOfferSetting) error

	UpdateOffer(offer *models.AstrologerOfferSetting) error

	CreateRestTime(rest *models.AstrologerRestTime) error

	UpdateRestTime(rest *models.AstrologerRestTime) error

	DeleteRestTime(id uint) error

	CreateStatusLog(log *models.AstrologerStatusLog) error

	GetStatusLogs(astrologerID uint, limit int) ([]models.AstrologerStatusLog, error)
}

type DashboardData struct {
	Astrologer *models.Astrologer

	Status *models.AstrologerStatus

	Statistics *models.AstrologerDailyStatistics

	Offer *models.AstrologerOfferSetting

	RestTime []models.AstrologerRestTime

	WalletBalance float64
}
