package recommendations

import (
	"time"

	"github.com/google/uuid"
)

// Типы проблем
const (
	TypeUnused             = "UNUSED_IN_RECIPES"    // Товар не используется в техкартах
	TypeNoIncoming         = "NO_INCOMING"          // Ингредиент (GOODS) в техкарте, но нет приходов
	TypeStale              = "STALE_GOODS"          // Есть приходы, но нет продаж
	TypeDishInRecipe       = "DISH_IN_RECIPE"       // Блюдо (DISH) в составе другого блюда
	TypePurchasedButUnused = "PURCHASED_BUT_UNUSED" // Активно закупается, но нет в техкартах
	TypeUsageNoIncoming    = "USAGE_NO_INCOMING"    // Есть расходы, но нет приходов
)

// Recommendation - Результат анализа
type Recommendation struct {
	ID          uuid.UUID `gorm:"type:uuid;primary_key;default:gen_random_uuid()"`
	Type        string    `gorm:"type:varchar(50);index"`
	ProductID   uuid.UUID `gorm:"type:uuid;index"`
	ProductName string    `gorm:"type:varchar(255)"`
	Reason      string    `gorm:"type:text"`

	CreatedAt time.Time
}

// Repository отвечает за аналитические выборки и хранение результатов
type Repository interface {
	// Методы анализа (возвращают список структур, но не пишут в БД)
	FindUnusedGoods() ([]Recommendation, error)
	FindNoIncomingIngredients(days int) ([]Recommendation, error)
	FindStaleGoods(days int) ([]Recommendation, error)
	FindDishesInRecipes() ([]Recommendation, error)
	FindPurchasedButUnused(days int) ([]Recommendation, error)
	FindUsageWithoutPurchase(days int) ([]Recommendation, error)

	// Методы "Кэша" в БД
	SaveAll(items []Recommendation) error // Удаляет старые и пишет новые
	GetAll() ([]Recommendation, error)
}
