package store

import (
	"errors"

	"git.t-juice.club/torjus/apiary/models"
)

var ErrStoreUnhealthy = errors.New("store is unhealthy")

type LoginStats string

const (
	LoginStatsUndefined LoginStats = ""
	LoginStatsPasswords LoginStats = "password"
	LoginStatsCountry   LoginStats = "country"
	LoginStatsIP        LoginStats = "ip"
	LoginStatsUsername  LoginStats = "username"
	LoginStatsTotals    LoginStats = "total"
)

type AttemptQueryType string

const (
	AttemptQueryTypeUsername AttemptQueryType = "username"
	AttemptQueryTypePassword AttemptQueryType = "password"
	AttemptQueryTypeIP       AttemptQueryType = "ip"
)

type StatsResult struct {
	Name  string `json:"name"`
	Count int    `json:"count"`
}

type AttemptQuery struct {
	QueryType AttemptQueryType
	Query     string
}
type LoginAttemptStore interface {
	AddAttempt(l *models.LoginAttempt) error
	All() (<-chan models.LoginAttempt, error)
	Stats(statType LoginStats, limit int) ([]StatsResult, error)
	Query(query AttemptQuery) ([]models.LoginAttempt, error)
	HealthCheker
}

type HealthCheker interface {
	IsHealthy() error
}
