package order_repository

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

type OrderRepository interface {
	CreateOrder(order *model.Order, retryTime int) error
	AddOrderItem(orderItems *[]model.OrderItem) error
	UpdateOrderInfo(filter OrderFilter, info map[string]interface{}) (int64, error)
	UpdateOrders(filter OrderFilter, info map[string]interface{}) error
	UpdateDeliveredItem(orderId int64) error

	GetOrders(filter OrderFilter) ([]model.Order, error)
	FirstOrders(filter OrderFilter) (*model.Order, error)
	GetBuyerOrder(filter BuyerOrderFilter) (*entity.BuyerOrderDetail, error)
	GetBuyerOrders(filter BuyerOrderFilter) ([]entity.BuyerOrderList, error)

	SellerOrderList(sellerId int64, filter SellerOrderFilter) ([]entity.SellerOrder, error)
	SellerOrderDetail(orderID int64) ([]entity.SellerOrderItem, error)

	UpdateOrderItem(filter OrderItemFilter, data map[string]interface{}) (int64, error)
	QueryOrderItem(filter OrderItemFilter) ([]model.OrderItem, error)
}

type repository struct {
	db *gorm.DB
}

type OrderFilter struct {
	Id       int64
	UserId   int64
	OrderIds []int64
}

type BuyerOrderFilter struct {
	Id          int64
	UserId      int64
	Status      int
	GroupStatus int
}

type SellerOrderFilter struct {
	StoreId       int64
	Status        []int
	PaymentStatus []int
	CreatedFrom   *time.Time
	CreatedTo     *time.Time
	OrderIds      []int64
	Limit         int
	Page          int
	GroupStatus   int
}

type OrderItemFilter struct {
	Id         int64
	OrderId    int64
	ProductIds []int64
	Status     []int
}

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