package product_repository

import (
	"chonho/internal/api-v1/entity"
	"chonho/pkg/model"
	"gorm.io/gorm"
)

type ProductRepository interface {
	SaveProduct(prod *model.Product) error
	SaveStoreProduct(prod *model.StoreProduct) error
	UpdateProduct(id int64, attibutes map[string]interface{}) error
	UpdateStoreProduct(id int64, prod *model.StoreProduct) error
	SaveStockChange(stockChange *model.StoreInventoryHistory) error
	FirstProduct(filter ProductFilter) (*model.Product, error)
	FirstStoreProduct(filter ProductFilter) (*model.StoreProduct, error)
	FindSellerProduct(filter *ProductFilter) ([]entity.SellerProduct, error)

	FindProduct(filter ProductFilter) ([]entity.ProductItem, error)
	FindStoreProduct(filter ProductFilter) ([]entity.FullStoreProduct, error)

	HoldOrderProduct(storeId, orderId int64, productQuantityMap map[int64]int) error
}

type repository struct {
	db *gorm.DB
}

func NewProductRepository(db *gorm.DB) *repository {
	return &repository{
		db: db,
	}
}

type ProductFilter struct {
	UserId      int64
	StoreId     int64
	SellerId    int64
	ProductId   int64
	CategoryId  int64
	ApartmentId int64

	Status        []int
	Name          string
	StockGreater  *int
	StockLessThan *int

	ProductIds    []int64
	IgnoreDeleted bool
}
