package service

import (
	entity "git.gocasts.ir/ebhomengo/niki/domain/order/entity"
	richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
	types "git.gocasts.ir/ebhomengo/niki/types"
)

type Service struct {
	repo Repo
}

type Repo interface {
	CreateOrder(order entity.Order, orderItems []entity.OrderItem) (types.ID, error)
	UpdateOrderProcessStatus(orderID types.ID, status string) (bool, error)
	GetShipping() ([]entity.Shipping, error)
}

func New(orderRepo Repo) Service {
	return Service{repo: orderRepo}
}

func (s *Service) CreateOrder(order entity.Order, orderItems []entity.OrderItem) (types.ID, error) {
	const Op = "domain.order.service.order.CreateOrder"
	orderID, err := s.repo.CreateOrder(order, orderItems)

	if err != nil {
		return 0, richerror.New(Op).WithErr(err)
	}

	return orderID, nil
}

func (s *Service) UpdateOrderProcessStatus(orderID types.ID, status string) (bool, error) {

	const Op = "domain.order.service.order.UpdateOrderProcessStatus"
	_, err := s.repo.UpdateOrderProcessStatus(orderID, status)
	if err != nil {
		return false, richerror.New(Op).WithErr(err)
	}

	return true, nil
}
