package product_usecase

import (
	"chonho/internal/api-v1/entity"
	"chonho/internal/api-v1/repository/category_repository"
	"chonho/internal/api-v1/repository/product_repository"
	"chonho/internal/api-v1/repository/store_repository"
	"chonho/pkg/model"
)

type ProductUseCase interface {
	// seller

	CreateProduct(user *model.User, request *entity.AddSellerProductRequest) (*entity.SellerProduct, error)
	UpdateProduct(user *model.User, productId int64, request *entity.UpdateSellerProductRequest) error
	DeleteProduct(user *model.User, productId int64) error
	GetSellerProduct(user *model.User, productId int64) (*entity.SellerProduct, error)
	GetSellerProducts(user *model.User, filter *product_repository.ProductFilter) ([]entity.SellerProduct, error)

	// buyer

	GetProduct(id int64) (*entity.ProductItem, error)
	GetProducts(filter product_repository.ProductFilter) ([]entity.ProductItem, error)
}

type useCase struct {
	categoryRepo category_repository.CategoryRepository
	productRepo  product_repository.ProductRepository
	storeRepo    store_repository.StoreRepository
}

func NewProductUseCase(productRepo product_repository.ProductRepository, storeRepo store_repository.StoreRepository, categoryRepo category_repository.CategoryRepository) *useCase {
	return &useCase{
		productRepo:  productRepo,
		storeRepo:    storeRepo,
		categoryRepo: categoryRepo,
	}
}
