package service

import "context"

// UserGroupRateEntry 分组下用户专属倍率条目
type UserGroupRateEntry struct {
	UserID         int64   `json:"user_id"`
	UserName       string  `json:"user_name"`
	UserEmail      string  `json:"user_email"`
	UserNotes      string  `json:"user_notes"`
	UserStatus     string  `json:"user_status"`
	RateMultiplier float64 `json:"rate_multiplier"`
}

// GroupRateMultiplierInput 批量设置分组倍率的输入条目
type GroupRateMultiplierInput struct {
	UserID         int64   `json:"user_id"`
	RateMultiplier float64 `json:"rate_multiplier"`
}

// UserGroupRateRepository 用户专属分组倍率仓储接口
// 允许管理员为特定用户设置分组的专属计费倍率，覆盖分组默认倍率
type UserGroupRateRepository interface {
	// GetByUserID 获取用户的所有专属分组倍率
	// 返回 map[groupID]rateMultiplier
	GetByUserID(ctx context.Context, userID int64) (map[int64]float64, error)

	// GetByUserAndGroup 获取用户在特定分组的专属倍率
	// 如果未设置专属倍率，返回 nil
	GetByUserAndGroup(ctx context.Context, userID, groupID int64) (*float64, error)

	// GetByGroupID 获取指定分组下所有用户的专属倍率
	GetByGroupID(ctx context.Context, groupID int64) ([]UserGroupRateEntry, error)

	// SyncUserGroupRates 同步用户的分组专属倍率
	// rates: map[groupID]*rateMultiplier，nil 表示删除该分组的专属倍率
	SyncUserGroupRates(ctx context.Context, userID int64, rates map[int64]*float64) error

	// SyncGroupRateMultipliers 批量同步分组的用户专属倍率（替换整组数据）
	SyncGroupRateMultipliers(ctx context.Context, groupID int64, entries []GroupRateMultiplierInput) error

	// DeleteByGroupID 删除指定分组的所有用户专属倍率（分组删除时调用）
	DeleteByGroupID(ctx context.Context, groupID int64) error

	// DeleteByUserID 删除指定用户的所有专属倍率（用户删除时调用）
	DeleteByUserID(ctx context.Context, userID int64) error
}
